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.