カスタム投稿タイプの「コース」に対する新しいクエリを作成しました。これらの結果は、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
),";
};
しかし、私はそれに近づくための最善の方法ではないだろうという気持ちがありますか?
あなたの時間とあなたが与えることができるどんな助けでも本当にありがとう!
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,
)
);
?>
念のために、誰かがこれを見ているのなら、クエリインスタンス内に複数のケースがある場合は、変数を別の配列でラップする必要があります。
$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',
));
}