is_front_page() malfunction?

时间:2015-08-20 作者:Ejaz

我有一个非常基本的问题,我很惊讶WP没有本地解决方案(除非我忽略了一些东西,希望如此)。

我有一个WP网站static page 在阅读设置中设置为首页。在插件代码中,我试图确定WP是否显示在首页,并将类添加到$classes 如果为true,则返回数组。我使用以下代码来完成它

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管理员设置将其设置为主页,那么为什么Wordpress代码不能通过检查退出PHP_SELFREQUEST_URI?$this->post 在这一点上通过删除plugins(和mu-plugins)目录,我排除了插件问题。它仍然合格wp-signup.php 作为头版,它不适用于任何其他页面。

对此问题的任何帮助都将不胜感激。

Update
我使用的是WP verison 4.2.4,它是一个多站点设置。

谢谢

2 个回复
SO网友:CK MacLeod

只是猜测,但我想知道您是否遇到了匿名函数问题。WP中允许使用匿名函数,并且通常可以正常工作(假定更新了PHP),但是,如果您四处搜索,您会发现可疑错误的报告,或者至少是意外行为的报告。

就这一点而言,我不确定我是否在WordPress Codex中看到过一个匿名函数作为示例,我也不记得以前在主题和插件代码中遇到过这样的函数。当然,我还没有注意到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/ ), 或者也可以把每一个都写为“两方”。

事实上,我发现稍微长一点的两部分方式更容易阅读、跟踪和调整。

SO网友:jim.duck

WordPress对站点上的页面使用不同的模板。如果你有一页。主题中的php模板,用于显示页面。如果你有单人房。php,它将用于显示您的单个帖子。指数php或主页。php将显示您的主页。php,如果您通过阅读选项选择了某个页面作为主页。

那么,您的条件语句:

<?php if (is_front_page()){ ?>
<p>Home Page</p>
<?php else { ?>
<p>Not Home Page</p>
<?php } ?>
?>
只有在标题中才真正有用。php或页脚。php文件-或在页面中。php,如果您在阅读选项中选择了某个页面。

结束

相关推荐

New Site URL for Multisite

我想创建新的网络,但有问题,因为Wordpress说它是无效的。我有一个基本urlhttp://website.com 然后我正试图在那之后创建一个新的网络。我希望我的新网络的名称如下:http://website.com/network1/football/page1http://website.com/network1/baseball/page2http://website.com/network1/soccer/page3http://website.com/network2/football/p