Вопрос или проблема
Мне никак не удается понять, что вызывает ошибку, когда я включил режим отладки на своем локально установленном сайте WordPress.
Уведомление: is_embed была вызвана неправильно. Условные теги запросов не работают до выполнения запроса. До этого момента они всегда возвращают false. Пожалуйста, смотрите “Отладка в WordPress” для получения дополнительной информации. (Это сообщение было добавлено в версии 3.1.0.) в /Applications/MAMP/htdocs/hostingfacts/wp-includes/functions.php на строке 4139
Это проблема с каким-то плагином?
P.S. Я использую MAMP
Сама ошибка не из-за режима отладки, кажется, что хук, который вы используете, вызывается до того, как устанавливается $wp_query.
Что вы можете сделать, так это добавить в свою функцию
function your_error_function(){
global $wp_query;
if(! isset( $wp_query )){
return
}
...остальная часть моего кода
}
или поменять хук, который вы используете, на другой, который вызывается позже, что-то вроде ‘loop_start’ должно подойти.
Ответ или решение
Ошибка PHP: "is_embed" возникает при использовании условных меток запроса до того, как сам запрос будет выполнен. Это особенно актуально для работы с WordPress, так как данная ошибка указывает на то, что ваш код вызывает is_embed()
до инициализации глобального объекта $wp_query
.
Сообщение об ошибке, которое вы видите, указывает на то, что обработчик, который вы используете, выполняется слишком рано в жизненном цикле загрузки WordPress, прежде чем будут установлены необходимые данные для выполнения проверки. Это поведение было добавлено в WordPress версии 3.1.0 для повышения точности и предотвращения недоразумений при использовании условных меток запроса.
Решение проблемы
-
Переместите код в более поздний хук: Вместо использования
init
,wp_loaded
или аналогичных хуков, которые выполняются слишком рано, попробуйте переключиться на хуки, которые выполняются позже в процессе загрузки страницы, напримерwp
илиloop_start
.Пример:
add_action('wp', 'your_custom_function'); function your_custom_function() { if (is_embed()) { // Ваш код, который должен выполняться только для встраиваемого контента } }
-
Проверьте использование глобальной переменной
$wp_query
: Если вам действительно необходимо выполнять некоторые проверки или действия до выполнения запроса, убедитесь, что вы проверяете существование переменной$wp_query
. Чтобы избежать возникновения ошибки, вы можете использовать следующий код:function your_error_function() { global $wp_query; if (!isset($wp_query)) { return; // Завершаем выполнение функции, если $wp_query не установлен } if (is_embed()) { // Ваш код здесь } }
-
Проверка плагинов: Возможно, что один из ваших плагинов или ваша тема вызывает
is_embed()
преждевременно. Попробуйте поочередно отключать плагины или переключаться на стандартную тему (например, Twenty Twenty-One), чтобы определить источник проблемы. -
Отключение режима отладки: Несмотря на то, что проблема не связана непосредственно с режимом отладки, стоит рассмотреть возможность отключения отладки, когда вы закончите разработку. Это не устранит ошибку, но улучшит взаимодействие с пользователем, скрывая ненужные уведомления.
Заключение
Ошибка "is_embed called incorrectly" не является критической, но её появление указывает на необходимость проверки вашей логики программирования в контексте WordPress. Изменение хуков или корректировка условий вызова может помочь избежать этой ошибки. Помните, что правильное использование хуков и глобальных переменных улучшает стабильность и производительность вашего сайта на WordPress.
Если вы продолжаете сталкиваться с проблемами, рекомендуется обратиться к документации WordPress или сообществу разработчиков для получения дополнительной информации и поддержки.