Поддержка Проблемы и решения Ошибка «Notice: Trying to get property of non-object in»

  • Здравствуйте. У меня на сайте в режиме отладки видно ошибку:

    Notice: Trying to get property of non-object in /var/www/сайт/wp-content/themes/theme1692/functions.php on line 97

    Как можно её исправить? Из-за чего она происходит?

    // custom excerpt ellipses for 2.9+
    	function custom_excerpt_more($more) {
    		return 'Read More »';
    	}
    	add_filter('excerpt_more', 'custom_excerpt_more');
    	// no more jumping for read more link
    	function no_more_jumping($post) {
    		return '&nbsp;<a href="'.get_permalink($post->ID).'" class="read-more">'.'Continue Reading'.'</a>';
    	}
    	add_filter('excerpt_more', 'no_more_jumping');

    97 строка у меня:
    return '&nbsp;<a href="'.get_permalink($post->ID).'" class="read-more">'.'Continue Reading'.'</a>';

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    В приведённом фрагменте несколько проблем:

    1. Функция no_more_jumping() пытается получить параметр $post и значение $post->ID, но в фильтре exceprt_more такого параметра нет. Есть параметр $more_string, но у строки нет свойства ID, о чём и говорится в ошибке.
    2. Передавать ID записи в функцию get_permalink() в данном случае нет необходимости, она может получить его сама из глобальной переменной $post.
    3. Функции custom_excerpt_more() и no_more_jumping() одновременно работать не будут, вторая затирает результат первой.

    Можно переписать данный код примерно так:

    
    // no more jumping for read more link
    function no_more_jumping() {
    	return '&nbsp;<a href="' . esc_url( get_permalink() ) . '" class="read-more">Continue Reading</a>';
    }
    add_filter( 'excerpt_more', 'no_more_jumping' );

    `

    Автор kirsanof

    (@kirsanof)

    Спасибо! Помогло.
    Остались две ошибки:
    1) Deprecated: Функция block_categories с версии 5.8.0 считается устаревшей! Используйте block_categories_all. in /var/www/site-ru/wp-includes/functions.php on line 5586

    2) Deprecated: Функция contextual_help с версии 3.3.0 считается устаревшей! Используйте get_current_screen()->add_help_tab(), get_current_screen()->remove_help_tab(). in /var/www/site-ru/wp-includes/functions.php on line 5586

    Код functions.php:

    if ( WP_DEBUG && apply_filters( 'deprecated_hook_trigger_error', true ) ) {
    		$message = empty( $message ) ? '' : ' ' . $message;
    
    		if ( $replacement ) {
    			trigger_error(
    				sprintf(
    					/* translators: 1: WordPress hook name, 2: Version number, 3: Alternative hook name. */
    					__( '%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.' ),
    					$hook,
    					$version,
    					$replacement
    				) . $message,
    				E_USER_DEPRECATED
    			);
    		} else {
    			trigger_error(
    				sprintf(
    					/* translators: 1: WordPress hook name, 2: Version number. */
    					__( '%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.' ),
    					$hook,
    					$version
    				) . $message,
    				E_USER_DEPRECATED
    			);
    		}
    	}
    }

    Строка 5586 у меня:
    E_USER_DEPRECATED

    С этим можно что-нибудь сделать?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Заметил, что имеет место неточность в переводе: block_categories_all и contextual_help — это не функции, а фильтры (на которые можно «вешать» другие функции), но в переводе это пока не поддаётся уточнению. Создал тикет: #54658.

    Да, эти сообщения можно убрать, но файл wp-includes/functions.php здесь не поможет, т.к. ошибки не в нём, а в теме или плагинах, использующих эти устаревшие фильтры. (Раньше, насколько помню, можно было найти точное место с помощью плагина Log Deprecated Notices, но сейчас он давно не обновлялся, и заявленное отслеживание не работает.)

    Варианты исправления:

    • Обновить плагины и тему до актуальных версий — возможно, эти поправки там уже внесены.
    • Поискать block_categories_all и contextual_help в файлах плагинов и темы и переписать эти фрагменты.
    • Отключить все плагины. Если ошибки пропадут — включать по одному.
    • Переключиться на одну из стандартных тем. Если ошибки пропадут — искать, где именно в теме используются устаревшие фильтры.
Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Тема «Ошибка «Notice: Trying to get property of non-object in»» закрыта для новых ответов.