У меня довольно простая проблема, и я удивлен, что 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() )