If no attributes are used on the shortcode, then $atts
will be a string, so you can’t use extract
on it. Part of your problem is that you’re not using shortcode_atts
correctly. You need to assign the value of shortcode_atts
back to $atts
. That will ensure that $atts
is an array with all the correct keys.
add_shortcode('img_portfolio', 'add_img_portfolio');
function add_img_portfolio($atts){
$atts = shortcode_atts(array(
'url' => 'https://s3.amazonaws.com/popco/images/services/starter-page/img-placeholder.jpg',
'height' => 'auto'
), $atts);
extract($atts);
return '<img class="img-fluid d-block mx-auto" src="'.$url.'" alt="" width=100% height="'.$height.'">';
}
But honestly, don’t use extract()
, it’s considered a bad practice, because your code ends up with a bunch of variables that aren’t apparently assigned anywhere. Just use $atts
as an array:
function add_img_portfolio($atts){
$atts = shortcode_atts(array(
'url' => 'https://s3.amazonaws.com/popco/images/services/starter-page/img-placeholder.jpg',
'height' => 'auto'
), $atts);
return '<img class="img-fluid d-block mx-auto" src="'.$atts['url'].'" alt="" width=100% height="'.$atts['height'].'">';
}