如何过滤WordPress搜索,在一些自定义分类中排除POST?

时间:2011-08-05 作者:Cédric G

我想在自定义分类法的2个值上过滤WordPress搜索(以及WordPress帖子列表)。

我尝试了这段代码,过滤了名为“marque”的自定义分类法,排除了70或67个ID(注意:在我的后台,一次只能将帖子分类为我的分类法的一个术语):

// Filtering on listing
function filtre_listes( $query ) {
    if ( !is_admin() ) {
        $query->set( \'marque\', \'-70,-67\' );
    }
    return $query;
}
add_action( \'pre_get_posts\', \'filtre_listes\' );

// Filtering on searches
function filtre_recherches(&$query)
{
    if ( $query->is_search && ( !is_admin() ) )
        $query->set(\'marque\', \'-70,-67\');
    return $query;
}
add_action(\'parse_query\', \'filtre_recherches\');
但它似乎不起作用。我使用WordPress 3.0.5。

有什么想法吗?

非常感谢,很抱歉我的近似英语!

2 个回复
SO网友:Chris Carson

Try

$tax_query = array(
    \'relation\' => \'AND\',
     array(
        \'taxonomy\' => \'marque\',
        \'terms\' => array( 70, 67 ),
        \'field\' => \'term_id\',
        \'operator\' => \'NOT IN\'
      )
 );
 //turn it into a WP_Tax_Query object...
$tax_query = new WP_TaxQuery($tax_query);

$query->set("tax_query", $tax_query);
SO网友:rjb

通过使用功能强大的pre_get_posts

考虑以下放置在主题中的示例functions.php 文件:

add_action( \'pre_get_posts\', function ( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

    // Exclude Terms by ID from Search and Archive Listings
    if ( is_search() || is_tax( \'marque\' ) ) {    
        $tax_query = array([
            \'taxonomy\' => \'marque\',
            \'field\' => \'term_id\',
            \'terms\' => [ 67, 70 ],
            \'operator\' => \'NOT IN\',
        ]);

        $query->set( \'tax_query\', $tax_query );
    }
}, 11, 1 );
此操作将从任何搜索结果或存档列表中排除给定分类法(标记)中的术语(67、70)。

$query 对象是通过引用传递的,我们不需要声明全局变量或返回值。因此,从函数内部对对象所做的任何更改都会立即对原始对象进行更改。

结束

相关推荐

Intelligent Search Filtering

我需要一些关于搜索插件的帮助:WP自定义字段搜索。我有三个下拉菜单:1。城市2。郊区3。美食我需要的是,当你选择一个城市时,它会自动移动2。郊区与该城市相关。是一个自定义字段,即任何城市都可以有中国餐馆。郊区所以没关系,但只有某些城市的某些郊区。。。那么我该如何过滤任何想法呢?