У меня довольно простая проблема, и я удивлен, что 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() )
Ответы:
Просто предположение, но мне интересно, сталкиваешься ли ты с проблемой анонимной функции. Анонимные функции разрешены в WP и обычно работают нормально (при условии обновления PHP), но, если вы будете искать вокруг, вы найдете сообщения о подозрительных ошибках или, по крайней мере, о непредвиденном поведении.
В этом отношении, я не уверен, что когда-либо видел анонимную функцию, используемую в качестве примера в Кодексе WordPress, и я не могу вспомнить, чтобы когда-либо работали с ней ранее в коде темы и плагина. Конечно, я не обращал внимания на функции anon, но, тем не менее, я думаю, что вышеупомянутая функция почти всегда будет написана в некоторой версии более знакомого двухчастного формата - то есть:
Итак, в качестве эксперимента я бы попробовал описанный выше более «обычный» формат, а также попробовал бы его с назначенным приоритетом выше или ниже 10. Если присоединить несколько анонимных функций к одному и тому же фильтру, я бы дал им разные приоритеты, или используйте массив (пример здесь: http://snippets.khromov.se/adding-multiple-actions-and-filters-using-anonymous-functions-in-wordpress/ ), или напишите каждый из них как названный two- Партнеры тоже.
По правде говоря, я считаю, что чуть более длинный двухчастный способ легче читать, отслеживать и настраивать.
источник
WordPress использует разные шаблоны для страниц вашего сайта. Если у вас есть шаблон page.php в вашей теме, он будет использоваться для отображения ваших страниц. Если у вас есть single.php, он будет использоваться для отображения ваших отдельных сообщений. index.php или home.php будут отображать вашу домашнюю страницу, или page.php, если вы выбрали определенную страницу в качестве домашней страницы с помощью опций чтения.
Итак, ваше условное утверждение:
Было бы действительно полезно в файле header.php или в файле footer.php или в файле page.php, если в опциях чтения выбрана определенная страница.
источник