Query_vars覆盖WP_QUERY参数

时间:2017-04-24 作者:ste

寻找新的视角,

我有一个用于我的CPT及其分类的自定义存档。

该页面有一个输入搜索表单来过滤CPT的帖子,也有下拉列表来按术语过滤。

问题是,在页面加载时,当循环实例化WP\\u查询参数时,会被get_query_vars.

例如posts_per_page 设置为2。然而query_vars 劫持args并将其更改为12(出于某种原因,未在网站上的任何其他地方声明)

逻辑如下。

$q = get_query_var( \'q\' ); 


$args = array(
    \'post_type\'      => $post_type, 
    \'post_status\'    => \'publish\',
    \'orderby\'        => \'post_date\',
    \'order\'          => \'DESC\',
    \'paged\'          => $paged,
    \'posts_per_page\' => $posts_per_page, // tried 2
    \'tax_query\'      => $tax_query,
    \'s\'              => $q
);
$wp_query = new WP_Query( $args );
表单-请参阅q 作为值

 <form id="filter-form" role="search" method="get" class="" action="<?php the_permalink(); ?>">
 <!-- Query -->
<label>
<span class="screen-reader-text"><?php echo _x( \'Enter Keyword\', \'label\' )?></span>
<input type="search" class="search-field"
       placeholder="Keywords"
       value="<?= $q ?>"
       name="q"
       title="<?php echo esc_attr_x( \'Enter Keyword\', \'label\' ) ?>"/>
</label>
etc
过滤器已注册并挂接在函数中。php符合codex

function add_query_vars_filter( $vars ){
    $vars[] = "q";
    return $vars;
}
add_filter( \'query_vars\', \'add_query_vars_filter\' );

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

在设置查询之前,用一个简单的条件解决了它

if (isset($_GET[\'q\'])) {
    $q = get_query_var( \'q\' );
} else{
    // otherwise null, nothing to see here
    $q = null;
}

SO网友:Tom J Nowell

我不认为这是在做你认为它在做的事情,但有一个微不足道的解决方案

使用s 参数带有pre_get_posts 使用过滤器s 因为输入的名称将允许您通过主查询进行直接搜索,从而加快页面加载速度。

此外,您还可以使用pre_get_posts 筛选以添加所需的其他参数,例如。

add_filter( \'pre_get_posts\', function( \\WP_Query $q ) {
    if ( !$q->is_main_query() || !$q->is_search() ) {
        return;
    }
    $q->set( \'posts_per_page\', 2 );
    // etc...
} );
但我不想使用search.php, 我为这件事提供了一个不同的模板,这是你应该单独问的另一个问题,但幸运的是,有人击败了你:

How to create a custom search for custom post type?

相关推荐

如何将变量传递给Get_Search_Form()?

是否可以将变量传递给get_search_form()? 我在两个地方使用它:一个在标题中,另一个在内容的搜索页面上。后者必须具有附加类,例如。search--full. 我试着用is_search() 但尽管它在其他页面上运行良好,但在搜索页面上,两种表单都有search--full 班