自定义Query_var导致在首页显示帖子存档

时间:2016-08-23 作者:pawelkmpt

我遇到了一个由名为date 我添加了使用query_vars 钩什么时候date 参数出现在首页URL中(https://example.com/?date=23.08.2016), WordPress正在加载帖子存档,而不仅仅是首页。将其他随机参数添加到链接时(https://example.com/?foo=bar) 或者没有参数,首页正确加载了我定义的静态页面。

后端的Posts页面与front页面不同。

我使用以下代码添加了自定义查询变量:

my_query_vars( $vars ) {
    $vars[] = \'date\';
    return $vars;
}

add_filter( "query_vars", "my_query_vars" );
知道为什么会发生这样的事吗?

1 个回复
最合适的回答,由SO网友:pawelkmpt 整理而成

详细调试后WP::parse_request()WP_Query::parse_query() 我发现了unset( $query_vars[\'date\'] ); 在里面\'request\' 过滤器帮助。

之前基本上未设置日期查询变量WP_Query::parse_query() 是这样调用的is_home() 返回false。

add_filter( \'request\', function( $query_vars ) {
        global $wp_query, $wp;

        if ( ! $wp_query->is_main_query() ) {
            return $query_vars;
        }

        $qv_keys = array_keys( $wp->query_vars );

        if ( ! ( in_array( \'product_cat\', $qv_keys, true )
           || in_array( \'product_tag\', $qv_keys, true )
           || in_array( \'post_type\', $qv_keys, true ) && \'product\' === $wp->query_vars[\'post_type\']
           || in_array( \'s\', $qv_keys, true )
        ) ) {
            unset( $query_vars[\'date\'] );
        }

        return $query_vars;
} );

Explanation:

发布存档加载时WP_Query::$is_home = true 所以我追溯了这个值设置的地方,简言之,我认为它是这样的:

  1. $this->query_vars[\'post_type\']$this->query_vars[\'name\'] 未设置in this condition as date查询变量未分配任何职位类型WP_Query::$is_singular 设置为falsehereWP_Query::$is_home = true.

相关推荐

将wp_Query替换为wp_User_Query

我在插件中制作了一些订阅者档案和单曲(个人资料页),其中我还包括了一个“用户单曲”模板,通过template_include. 不过,我正在尝试从插件中删除一些模板,以使其使用主题模板。我用了locate_template( \'single.php\' ) 从活动主题中选择单个模板。我没有使用全局wp_query 在本例中显示我的内容,但页面显示了基于查询默认值的循环(十篇帖子)。我想知道的是,我是否可以完全放弃默认查询,用wp_user_query 我可以将查询到的用户ID输入其中。然后我想筛选the