Вопрос или проблема
У меня есть следующий код на строках 315 и 316 в файле моей темы customizer.php. По какой-то причине я получаю ошибку в файле error_log в корне установки. Однако все, похоже, работает нормально.
$wp_customize->get_panel('widgets')->title = __( 'Widgets' );
$wp_customize->get_panel('widgets')->priority = 4;
Это ошибка:
PHP Warning: Создание объекта по умолчанию из пустого значения в /wp-content/themes/theme/inc/customizer.php на строке 315
PHP Warning: Создание объекта по умолчанию из пустого значения в /wp-content/themes/theme/inc/customizer.php на строке 316
Что не так с приведенным выше кодом?
Вот решение, похоже, он ранее возвращал массив:
$widgets_section = (object) $wp_customize->get_panel( 'widgets' );
$widgets_section->title = __( 'Widgets' );
$widgets_section->priority = 4;
.
Ответ или решение
Почему возникает ошибка "Creating default object from empty value" в WordPress Customizer
Ошибка "Creating default object from empty value" возникает в результате попытки доступа к объекту, который не был инициализирован в WordPress Customizer. В данном случае проблема заключается в том, что метод $wp_customize->get_panel('widgets')
возвращает значение null
, если панель с указанным именем не была создана или зарегистрирована. Когда вы пытаетесь установить свойства title
и priority
у этого неинициализированного объекта, PHP выдает предупреждение о попытке создать объект из пустого значения.
Проблемное место кода
Согласно предоставленному коду:
$wp_customize->get_panel('widgets')->title = __( 'Widgets' );
$wp_customize->get_panel('widgets')->priority = 4;
В случае, если панель ‘widgets’ не существует, вызов $wp_customize->get_panel('widgets')
вернет null
, и попытка обращения к свойствам title
и priority
вызовет предупреждение. Это можно исправить проверкой существования панели перед тем, как обращаться к ее свойствам.
Правильное решение
Ваше исправление выглядит следующим образом:
$widgets_section = (object) $wp_customize->get_panel('widgets');
$widgets_section->title = __( 'Widgets' );
$widgets_section->priority = 4;
Тем не менее, важно отметить, что простое приведение к объекту не устранит основную проблему, если панель по-прежнему не существует. Вместо этого лучше убедиться, что панель действительно создается перед попыткой настройки ее свойств.
Оптимизированное решение
Предлагаю следующее оптимизированное решение:
if ( $wp_customize->get_panel('widgets') ) {
$widgets_section = $wp_customize->get_panel('widgets');
$widgets_section->title = __( 'Widgets' );
$widgets_section->priority = 4;
} else {
// Возможная обработка случая, когда панель 'widgets' не существует
// Например, вы можете создать панель здесь
// $wp_customize->add_panel( 'widgets', /* параметры панели */ );
}
Выводы
Используя предложенное решение, вы устраняете предупреждение и добавляете контроль над логикой вашей программы, позволяя избежать неожиданного поведения. Обработка случаев, когда панель не существует, обеспечивает более предсказуемое и чистое поведение вашего кода.
Как правило, всегда полезно проверять существование объектов или значений перед их использованием в PHP, чтобы избегать подобных предупреждений. Это повышает общую надежность и удобочитаемость вашего кода.
Следуя этим рекомендациям, вы можете создать более стабильный и устойчивый к ошибкам код в вашем проекте на WordPress.