У меня довольно простая проблема, и я удивлен, что WP не имеет собственного решения (если, я надеюсь, что-то пропущу).
У меня есть сайт WP с static page
установленной главной страницей в настройках чтения. В коде плагина я пытаюсь определить, отображает ли WP титульную страницу, и добавить класс в $classes
массив, если это так. Я использую следующий код для этого
add_filter('body_class', function($classes){
if(is_front_page() || is_home()){
$classes[] = 'home-page';
}
return $classes;
});
Я использую и то, is_front_page()
и другое, и is_home()
в случае, если настройка лицевой страницы изменится со статической страницы на макет в будущем
Проблема, с которой я сталкиваюсь, заключается в том, что этот код добавляет home-page
класс body
даже на wp-signup.php
странице.
Проверка кода выявляет те is_front_page()
вызовы WP_Query::is_front_page()
, которые по существу возвращают результаты WP_Query::is_page(get_option('page_on_front'))
. Таким образом, корень проблемы заключается в том, wp-signup.php
что она определяется как страница (id), возвращаемая get_option('page_on_front')
( что возвращает ID
статическую страницу, установленную в качестве главной страницы в настройках> чтение ).
WP_Query::is_page()
использует WP_Query::get_queried_object()
внутренне, чтобы решить, является ли текущая страница страницей в аргументах метода. В wp-signup.php
случае, если код, который устанавливает текущий запрашиваемый объект, выглядит следующим образом
/*...other code... */
elseif ( $this->is_singular && ! empty( $this->post ) ) {
$this->queried_object = $this->post;
$this->queried_object_id = (int) $this->post->ID;
}
/*...other code... */
Это показывает, что WordPress по какой-то причине запрашивает главную страницу для отображения wp-signup.php
и поднимает следующие вопросы.
- Почему
is_front_page()
возвращает неправильные результаты? - AFAIK
wp-signup.php
никогда не может быть установлен в качестве домашней страницы с помощью настроек администратора Wordpress, тогда почему код WordPress не выручает, просто проверяяPHP_SELF
илиREQUEST_URI
? - Почему WP_Query имеет текущую домашнюю страницу в
$this->post
данный момент?
Я исключил проблему с плагином , удалив каталог plugins (и mu-plugins). Это все еще квалифицируется wp-signup.php
как главная страница, где это не для любой другой страницы.
Любая помощь по этому вопросу будет принята с благодарностью.
Обновление
Я использую WP версии 4.2.4, и это многосайтовая установка.
Спасибо.
if
условие:( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )