How to find objects by terms

时间:2016-06-27 作者:El Danielo

我正在努力进行搜索过滤。首先,我的脚本使用自然搜索SQL搜索用户。查询返回用户的ID。现在,我想通过分配给每个用户的术语来过滤它们。我用了这个:

 $terms_ids = array();
 $terms_ids = $_GET[\'user_sport\'];
 $objects = get_objects_in_term($terms_ids, \'user_sport\');
 $unique = array_unique($objects);
 print_r($unique);
但是这个get_objects_in_term 函数返回至少有一个项的每个对象。我想要实现的恰恰相反。如果一个用户将足球作为一个术语,但没有篮球,则在我使用足球和篮球筛选用户时,不应显示该用户。除非我踢足球。有没有办法解决这个问题?另一种方法是第二个SQL查询,但我在编写SQL查询时发现术语和分类法之间的关系有点奇怪。

1 个回复
SO网友:Bhaskar K C

假设您试图拉取的“用户”是自定义的帖子类型。您可以使用“tax\\u query”,如下所示。

$user_args = array(
    \'post_type\'         => \'custom_user_post\',  // Custom post type,
    \'posts_per_page\'    => 10,
    \'paged\'             => ( ! empty( get_query_var( \'paged\' ) )? get_query_var(\'paged\'): 1 ),
    \'tax_query\'         => array(
        \'relation\' => \'AND\',
            array(
                \'taxonomy\'      => \'user_sports\', //assuming your custom taxonomy is \'user_sport\'
                \'field\'         =>  \'slug\',
                \'terms\'         =>  array( \'football\' )
            ),
            array(
                \'taxonomy\'      => \'user_sports\', //assuming your custom taxonomy is \'user_sport\'
                \'field\'         =>  \'slug\',
                \'terms\'         =>  array( \'basketball\' )
            )
    )
);

$users_list = new WP_Query( $user_args );