详细调试后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 所以我追溯了这个值设置的地方,简言之,我认为它是这样的:
- $this->query_vars[\'post_type\']和- $this->query_vars[\'name\']未设置in this condition as date查询变量未分配任何职位类型多次操作后的结果- WP_Query::$is_singular设置为falsehere它会导致- WP_Query::$is_home = true.