web-dev-qa-db-ja.com

用語でオブジェクトを見つける方法

検索フィルタリングに苦労しています。まず、私のスクリプトは自然検索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関数は、少なくとも1つの項を持つすべてのオブジェクトを返します。私が達成したいのは逆のことです。 1人のユーザーが用語としてフットボールを持っていてバスケットボールを持っていない場合、フットボールとバスケットボールでユーザーをフィルター処理するときに彼は表示されません。私がフットボールを使っている時だけ。この問題を解決する方法はありますか?もう1つのアプローチは2番目のSQLクエリーですが、SQLクエリーを書くためだけに、用語と分類法の関係が少し変わっていることがわかりました。

3
El Danielo

プルしようとしている「ユーザー」がカスタム投稿タイプであると想定します。以下のように "tax_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 );
1
Bhaskar K C