Поддержка Проблемы и решения Warning: mb_substr() expects parameter 1 to be string, array given in

  • Доброго времени суток.

    Несколько дней назад часть записей сайта перестала корректно воспринимать Произвольные поля с описанием и ключевыми.

    В файле header.php есть следующий код:

    
    <meta name="description" content="<?php 
          if ( is_front_page() || is_home() ) { 
        echo 'такое-то описание';
    } elseif ( is_single() || is_page() ) {
    //    echo get_post_meta($post->ID, "description", true);
        $trim_length = 170;
            $custom_field = 'description';
            $value = get_post_meta($post->ID, $custom_field, true);
            if ($value) {
              echo rtrim(mb_substr($value,0,$trim_length));
            }
    
    } 
        remove_filter('term_description','wpautop');
        if (is_category()) {echo category_description();
    } ?>" />
     
    <meta name="keywords" content="<?php 
          if ( is_front_page() || is_home() ) { 
        echo 'такие-то слова';
    } elseif ( is_single() || is_page() ) {
        $trim_length = 250; 
            $custom_field = 'keywords';
            $value = get_post_meta($post->ID, $custom_field, true);
            if ($value) {
              echo rtrim(mb_substr($value,0,$trim_length));
            }
    } ?>" />
    

    Все работало замечательно на протяжении длительного времени. Однако в последние дни при добавлении мероприятия в афишу (использую плагин «Events Manager») добавляется только одно из 2 произвольных полей. Делает это случайным образом, а вместо второго параметра вставляется:

    <br /> <b>Warning</b>: mb_substr() expects parameter 1 to be string, array given in <b>/var/www/u0355835/data/www/kmvexpress.ru/wp-content/themes/profitmag/header.php</b> on line <b>69</b><br />

    Строка с проблемой: echo rtrim(mb_substr($value,0,$trim_length));

    Для Записей и Страниц все работает корректно, как и раньше (разве что двоит часто произвольные поля по неизвестной причине).

    Подскажите, как можно забороть проблему? Так как причину «поломки» определить я не смог.

    Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • 
    $value = implode(",", get_post_meta($post->ID, $custom_field, true) );
    if ($value) {
    echo rtrim(mb_substr($value,0,$trim_length));
    }
    
    Автор altkmv

    (@altkmv)

    К сожалению, ничего не изменилось… При попытке добавлять Произвольные поля одно добавляет, а другое просто исчезает.

    Meta seo inspector все так же выдает предупреждение:

    description : <br /> <b>Warning</b>: implode(): Invalid arguments passed in <b>/var/www/u0355835/data/www/kmvexpress.ru/wp-content/themes/profitmag/header.php</b> on line <b>51</b><br /> (222 characters)

    Я понимаю, что предупреждает о конфликте строки с массивом. Но эти же самые поля в Записях не конфликтуют. А все берется из хэдера. Проблема неясная остается…

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Видимо, в каких-то случаях в поле попадает массив вместо строки.

    Попробуйте добавить проверку is_array():

    
    $value = get_post_meta( $post->ID, $custom_field, true );
    if ( is_array( $value ) ) {
    	$value = implode( ',', $value );
    }
    if ( $value ) {
    	echo rtrim( mb_substr( $value, 0, $trim_length ) );
    }
    
Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Тема «Warning: mb_substr() expects parameter 1 to be string, array given in» закрыта для новых ответов.