web-dev-qa-db-ja.com

$ somevarに値があるかどうかに応じたWP_Queryおよびtax_queryの条件付き引数

カスタム投稿タイプの「コース」に対する新しいクエリを作成しました。これらの結果は、tax_queryを使用してフィルタリングされ、1つまたは複数の用語IDに一致する3つのカスタム分類法を照会します。これらは検索ページから渡されます。

これまでに動作しているコードは次のとおりです。

// Lets emulate the posted ID's from the course search widget
// with some static term ID's for each custom taxonomy.
$search_course_area = array(65, 62);
$search_course_level = array(117); //52 for further filtering
$search_course_mode = array(54, 56); 


//Begin a new query
$query = new WP_Query(
    array(
        //Retreive ALL course posts
        'post_type' => 'course',
        'posts_per_page' => '-1',
        //Filter taxonomies by id's passed from course Finder widget
        'tax_query' => array(
                //Set the relation condition for the filters in 
                //this case we're using AND as it is explicity set 
                //by the user when searching
                'relation' => 'AND',
                //First check retreive course-area's based on ID
                array(
                    'taxonomy' => 'course-area',
                    'field' => 'id',
                    'terms' => $search_course_area
                ),
                //And again for the second taxonomy
                array(
                    'taxonomy' => 'study-levels',
                    'field' => 'id',
                    'terms' => $search_course_level
                ),
                //Finally check retreive course-level's based on ID
                array(
                    'taxonomy' => 'course-mode',
                    'field' => 'id',
                    'terms' => $search_course_mode
                ),
        )
    )
);

私が少し立ち往生していることは、空の配列が渡された場合、これは明らかにクエリを壊し、結果を返さないでしょう。

これに取り組むための最もクリーンな方法は何でしょうか。私は何かをすることができます:

if (isset($search_course_area)) {
    echo  "array(
                    'taxonomy' => 'course-area',
                    'field' => 'id',
                    'terms' => $search_course_area
                ),";
};

しかし、私はそれに近づくための最善の方法ではないだろうという気持ちがありますか?

あなたの時間とあなたが与えることができるどんな助けでも本当にありがとう!

4
Craig Pearson

WP_Queryインスタンス化の外で引数を定義することができます。

<?php
$tax_query = array('relation' => 'AND');
    if (isset($search_course_area))
    {
        $tax_query[] =  array(
                'taxonomy' => 'course-area',
                'field' => 'id',
                'terms' => $search_course_area
            );
    }
    if (isset($search_course_level))
    {
        $tax_query[] =  array(
                'taxonomy' => 'study-levels',
                'field' => 'id',
                'terms' => $search_course_level
            );
    }
    if (isset($search_course_mode))
    {
        $tax_query[] =  array(
                'taxonomy' => 'course-mode',
                'field' => 'id',
                'terms' => $search_course_mode
            );
    }

$query = new WP_Query(
    array(
        //Retreive ALL course posts
        'post_type' => 'course',
        'posts_per_page' => '-1',
        //Filter taxonomies by id's passed from course Finder widget
        'tax_query' => $tax_query,
    )
);
?>
11
jessica

念のために、誰かがこれを見ているのなら、クエリインスタンス内に複数のケースがある場合は、変数を別の配列でラップする必要があります。

$meta_query = array();

if ( 0 == $current_user->ID ) {
    $meta_query[] = array(array(
        'key'     => 'restrito_para_visualizar',
        'value'   => '1',
        'compare' => '!=',
        'type'    => 'CHAR',
    ),
    array(
        'key'     => 'ativo',
        'value'   => '1',
        'compare' => '=',
        'type'    => 'NUMERIC',
    ));
} else {
    $meta_query[] = array(
    array(
        'key'     => 'ativo',
        'value'   => '1',
        'compare' => '=',
        'type'    => 'NUMERIC',
    )); 
} 
0
Wesley Andrade