是否多次使用$QUERY->SET WITH PRE_GET_POST?

时间:2017-07-20 作者:RobbTe

我正在使用pre\\u get\\u posts挂钩,以便按自定义术语筛选帖子。一切正常,但如果我想按2个自定义术语筛选帖子,查询只按给定的最后一个术语进行筛选。请参见下面的我的代码。我将其挂接到pre\\u get\\u posts中,但当这两个if语句都为TRUE时,只完成最后一个$query->set,这意味着它不会对帖子进行两次过滤。有没有办法做到这一点?谢谢

//For searching
if( $query->is_main_query() && isset( $_GET[ \'ls\' ] ) ) {
$rt_term_id = $_GET[\'listing_soort\'];
$rt_term_id_land = $_GET[\'listing_land\'];
        // IF our soort vakantie is set and not empty - include it in the query
        if( isset( $rt_term_id ) && ! empty( $rt_term_id ) ) {
            $query->set( \'tax_query\', array( array(
                \'taxonomy\'  => \'vakantiesoorten_listing\',
                \'field\'     => \'id\',
                \'terms\'     => array($rt_term_id[0]),
            ) ) );
        }
        // IF our land vakantie is set and not empty - include it in the query
        if( empty($_GET[\'location_geo_data\']) && isset( $rt_term_id_land ) && ! empty( $rt_term_id_land ) ) {
            $query->set( \'tax_query\', array( array(
                \'taxonomy\'  => \'landen_listing\',
                \'field\'     => \'id\',
                \'terms\'     => array($rt_term_id_land[0]),
            ) ) );
        }
    }   

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

想想这个伪代码

if sky == blue
  set a = 5
if grass == green
  set a = 7
什么价值会a 有不是12个。

这是完全相同的情况。您正在将特定参数设置为特定值。在第二次调用中,您正在覆盖以前的值。为了避免这种情况,您可以事先构建值(这里是数组),然后调用->set() 只有一次。

$tax_query = array();
if( isset( $rt_term_id ) && ! empty( $rt_term_id ) ) {
    $tax_query[] = array(
        \'taxonomy\'  => \'vakantiesoorten_listing\',
        \'field\'     => \'id\',
        \'terms\'     => array($rt_term_id[0]),
    );
}
if( empty($_GET[\'location_geo_data\']) && isset( $rt_term_id_land ) && ! empty( $rt_term_id_land ) ) {
    $tax_query[] = array(
        \'taxonomy\'  => \'landen_listing\',
        \'field\'     => \'id\',
        \'terms\'     => array($rt_term_id_land[0]),
    );
}
$query->set( \'tax_query\', $tax_query );

SO网友:Jacob Peattie

可以这样做,只需获取税务查询的原始值,添加附加查询,然后再次设置。缩写版本为:

// Get current tax query if it exists, otherwise get an empty array.
$tax_query = $query->get( \'tax_query\' ) ?: array();

if ( true ) {
    $tax_query[] = array(); // Add first tax query.
}

if ( true ) {
    $tax_query[] = array(); // Add second tax query.
}

$query->set( \'tax_query\', $tax_query ); // Set tax query parameter on query.

结束

相关推荐

Hooks for Links Box

Possible Duplicate:Getting archive pages in WP's AJAX internal link finder? 新的有挂钩吗internal links box 创建于WP 3.1? 我正在尝试在插件中修改它。