WordPress вызывает предупреждение о неопределенной переменной

Вопрос или проблема

пожалуйста, помогите!

Я обновил PHP до версии 8.0 и WordPress до текущей версии (6.7.1), и теперь на моем сайте появляются следующие предупреждающие сообщения:

Warning: Undefined variable $post in /home/thespace/public_html/wp-content/themes/mon-cahier/functions.php on line 170
Warning: Attempt to read property “ID” on null in /home/thespace/public_html/wp-content/themes/mon-cahier/functions.php on line 170

Вот PHP для строки 170:

if ( is_singular() && wp_attachment_is_image ( $post->ID ) )
global $post;
{
wp_enqueue_script( ‘keyboard-image-navigation’, get_stylesheet_directory_uri() . ‘/js/keyboard-image-navigation.js’, array( ‘jquery’ ), ‘20120202’ );
}
}
add_action( ‘wp_enqueue_scripts’, ‘mon_cahier_scripts’ );

Как я могу исправить это и избавиться от этих предупреждений на моем сайте?

Как сказано в предупреждениях, $post используется, но не определен, отсюда “Undefined variable $post” и затем ‘Attempt to read property “ID” on null’. Кажется, что global $post находится в ошибочном месте и должен быть перед условием if:

global $post;
if ( is_singular() && wp_attachment_is_image ( $post->ID ) )

Вы также можете захотеть защититься от случая, если $post пуст, используя оператор nullsafe:

if ( is_singular() && wp_attachment_is_image ( $post?->ID ) )

Или, возможно, еще лучше, выполните проверку is_singular() перед доступом к $post, так как $post должен быть определен, если is_singular() истинно:

if ( is_singular() ) {
  global $post;
  if ( wp_attachment_is_image( $post->ID ) ) {
    wp_enqueue_script( 'keyboard-image-navigation', get_stylesheet_directory_uri() . '/js/keyboard-image-navigation.js', array( 'jquery' ), '20120202' );

.

Ответ или решение

Конечно, давайте разберем вашу проблему. После обновления PHP до версии 8.0 и WordPress до версии 6.7.1 вы начали получать предупреждения, связанные с неопределенной переменной $post. Эти ошибки возникают при попытке использовать переменную $post, которая не была предварительно объявлена или инициализирована в контексте, где она используется. Ваша строка кода выглядит следующим образом:

if ( is_singular() && wp_attachment_is_image ( $post->ID ) )
global $post;
{
    wp_enqueue_script( 'keyboard-image-navigation', get_stylesheet_directory_uri() . '/js/keyboard-image-navigation.js', array( 'jquery' ), '20120202' );
}

Здесь проблема заключается в том, что сначала происходит обращение к переменной $post, а затем ее объявление как глобальной. Это приводит к предупреждению об "неопределенной переменной" и "Попытке прочитать свойство ‘ID’ равного null". Вот как вы можете исправить эти ошибки:

  1. Перенос объявления глобальной переменной: Начните с объявления переменной $post как глобальной перед использованием внутри оператора if.

  2. Проверка на наличие переменной: Убедитесь, что переменная $post действительно существует и правильный объект WP_Post получен. Для этого разместите проверку is_singular() перед объявлением глобальной переменной.

  3. Применение nullsafe оператора: Если необходимо учесть случаи, когда $post может быть равен null, используйте nullsafe оператор.

Вот переписанная версия вашего кода:

if ( is_singular() ) {
    global $post;
    if ( $post && wp_attachment_is_image( $post->ID ) ) {
        wp_enqueue_script( 'keyboard-image-navigation', get_stylesheet_directory_uri() . '/js/keyboard-image-navigation.js', array( 'jquery' ), '20120202' );
    }
}

В этом примере:

  • Проверка условия is_singular() проводится первой, перед обращением к переменной $post.
  • Используется встроенная проверка на существование $post, предотвращая ошибки, связанные с обращением к свойствам null-объекта.

Эти изменения должны помочь устранить предупреждения и позволить вашему коду работать корректно в свежих версиях PHP и WordPress.

Также советую после внесения данных изменений протестировать ваш сайт, чтобы убедиться, что ошибок больше нет, и все страницы загружаются корректно. Если же после исправлений проблема останется, возможно, стоит рассмотреть дополнительные логи и отладочную информацию. Надеюсь, это решение поможет вам справиться с возникшей проблемой и сделать сайт более стабильным.

Оцените материал
Добавить комментарий

Капча загружается...