Warning: Illegal string offset 'size'

Вячеслав

Здравствуйте, помогите разобраться, пожалуйста, на страницах почти везде данное сообщение. Warning: Illegal string offset 'size' in "/home/...lib/required/customization.php on line 924 вот часть кода строки, где возникает ошибка

if(!$atts['size'])	$atts['size'] = 'thumbnail';
Полностью Код
// 5: Post Thumbnail Plugin *****/
function post_thumbnail_shortcode($atts, $content='') {	if(!function_exists('post_thumbnail_shortcode'))	return;	if(!$atts['size'])	$atts['size'] = 'thumbnail';	return '<figure class="post_thumbnail th '.$atts['class'].'">'.get_the_post_thumbnail(null, 'img_full').'</figure>';
}
function post_thumbnail($str){	$args = wp_parse_args($str);	echo post_thumbnail_shortcode($args);
}
add_shortcode('post_thumbnail', 'post_thumbnail_shortcode');
1 ответ

Вячеслав

  1. Это происходит из-за того что $atts это строка а не массив.
  2. Судя по коду $atts['size'] у вас дальше нигде не используется. По идее он должен быть передан в функцию get_the_post_thumbnail(null, $atts['size'])
  3. По хорошему вам нужно понять что приходит в функцию в этом случае и почему.

Предположу что такое приходит по причине того что вы создаете пустой шорткат. Например: [post_thumbnail]

Функцию можно переписать вот так:

function post_thumbnail_shortcode($atts, $content = '') { $extra_class = ''; $size = 'thumbnail'; if (is_array($atts)) { if (isset($atts['size'])) { if ($current_size = trim($atts['size'])) { $size = $current_size; } } if (isset($atts['class']))) { if ($current_class = trim($atts['class'])) { $extra_class = $current_class; } } } return '<figure class="post_thumbnail th'.$extra_class.'">'.get_the_post_thumbnail(null, $size).'</figure>';
}

Теперь шорткат без свойств получит поведение по умолчанию, но мы так же можем задать ему поведение [post_thumbnail size=img_full class=bordered]

Вот статья про то как работают шорт-коды

licensed under cc by-sa 3.0 with attribution.