我有一个非常基本的问题,我很惊讶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()
返回错误结果? wp-signup.php
永远无法使用Wordpress管理员设置将AFAIK 设置为主页,那么为什么不仅仅通过选中PHP_SELF
或来保存wordpress代码REQUEST_URI
?- 为什么此时WP_Query具有当前主页
$this->post
?
我已经通过删除plugins(和mu-plugins)目录排除了插件问题。它仍然可以wp-signup.php
作为首页,而没有其他页面。
任何有关此问题的帮助将不胜感激。
更新
我正在使用WP verison 4.2.4,它是一个多站点设置。
谢谢。
if
条件:( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )