is_front_page () неисправность?


8

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

Спасибо.


Вы определенно используете последнюю версию WordPress? И это многосайтовая установка?
TheDeadMedic

Я использую версию 4.2.4 и да, это многосайтовая установка. Добавлено в вопрос.
Ejaz

Это ... странно. Все, что я могу предложить сейчас, это использовать следующее ifусловие:( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )
TheDeadMedic

Спасибо за предложение @TheDeadMedic, которое сделает это. Итак, проблема в ошибке WP?
Ejaz

Я действительно слышал об этом раньше на WPMU. Попробуйте деактивировать свою тему и активировать ее.
Мэтт ван Андел

Ответы:


1

Просто предположение, но мне интересно, сталкиваешься ли ты с проблемой анонимной функции. Анонимные функции разрешены в WP и обычно работают нормально (при условии обновления PHP), но, если вы будете искать вокруг, вы найдете сообщения о подозрительных ошибках или, по крайней мере, о непредвиденном поведении.

В этом отношении, я не уверен, что когда-либо видел анонимную функцию, используемую в качестве примера в Кодексе WordPress, и я не могу вспомнить, чтобы когда-либо работали с ней ранее в коде темы и плагина. Конечно, я не обращал внимания на функции anon, но, тем не менее, я думаю, что вышеупомянутая функция почти всегда будет написана в некоторой версии более знакомого двухчастного формата - то есть:

add_filter('body_class', 'ejay_add_home_class');

function ejay_add_home_class($classes) {

    if (is_front_page() || is_home()) {

        $classes[] = 'home-page';
    }

    return $classes;
} 

Итак, в качестве эксперимента я бы попробовал описанный выше более «обычный» формат, а также попробовал бы его с назначенным приоритетом выше или ниже 10. Если присоединить несколько анонимных функций к одному и тому же фильтру, я бы дал им разные приоритеты, или используйте массив (пример здесь: http://snippets.khromov.se/adding-multiple-actions-and-filters-using-anonymous-functions-in-wordpress/ ), или напишите каждый из них как названный two- Партнеры тоже.

По правде говоря, я считаю, что чуть более длинный двухчастный способ легче читать, отслеживать и настраивать.


-4

WordPress использует разные шаблоны для страниц вашего сайта. Если у вас есть шаблон page.php в вашей теме, он будет использоваться для отображения ваших страниц. Если у вас есть single.php, он будет использоваться для отображения ваших отдельных сообщений. index.php или home.php будут отображать вашу домашнюю страницу, или page.php, если вы выбрали определенную страницу в качестве домашней страницы с помощью опций чтения.

Итак, ваше условное утверждение:

<?php if (is_front_page()){ ?>
<p>Home Page</p>
<?php else { ?>
<p>Not Home Page</p>
<?php } ?>
?>

Было бы действительно полезно в файле header.php или в файле footer.php или в файле page.php, если в опциях чтения выбрана определенная страница.


Спасибо за ответ, но я не вижу, как это влияет на значения, возвращаемые вышеупомянутыми функциями.
Ejaz

5
ОСТАНОВИТЬ СПАМИНГ !!!! , Ваши ссылки возвращаются на ваш собственный сайт. Ваши следующие сообщения будут помечены как спам. Спасибо
Питер Гусен

Это также даже не отвечает на поставленный вопрос
Питер Гусен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.