クエリ文字列から配列として値を収集しています。それからそれらの値を集めて、それらを 'meta_query'の値に入れます。
WP_Queryから何も出力されないという問題があります。 meta_queryの2番目の配列に問題があるようです。
比較を 'LIKE'に変更しようとしましたが、クエリの内容ではなくすべての内容が表示されます。また、関係[OR)を削除しようとしましたが、結果には影響しません。
変数を出力すると、正しい配列が得られます。
クエリ文字列:
?variable[]=value1&variable[]=value2
PHPコード:
<?php
$variable_selected = $_GET['variable'];
$filter = array(
'post_type' => 'my_custom_post_type',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'my_post_field',
'value' => $variable_selected,
'compare' => 'IN'
)
)
);
$posts = new WP_Query( $filter );
これに関するどんな助けでも素晴らしいでしょう。
URLクエリ文字列$_GET['variable']
、?variable[]=value1&variable[]=value2
および$_GET['variable'][0]
は、これら2つのキー値を返す必要があるため、この$_GET['variable'][1]
は配列です。
議論の後でそれを動的にする編集
$meta_query = array();
if ( ! empty( $_GET["variable"] ) ) {
if ( is_array( $_GET["variable"] ) ) {
$meta_query['relation'] = 'OR';
foreach ( $_GET["variable"] as $value ) {
$meta_query[] = array(
'key' => 'my_post_field',
'value' => sanitize_text_field( (string) $value ),
'compare' => '='
);
}
} else {
$meta_query = array(
'key' => 'my_post_field',
'value' => sanitize_text_field( (string) $_GET["variable"] ),
'compare' => '='
);
}
}
$filter = array(
'post_type' => 'my_custom_post_type',
'meta_query' => array(
'relation' => 'OR',
$meta_query
)
);
$posts = new WP_Query( $filter );
私はそれをテストしていたので、私はオペレータを=
に変更しました、そして、それは私のローカルインストールで働いた。
meta_compare(string) - 'meta_value'をテストするための演算子。可能な値は '='、 '!='、 '>'、 '> ='、 '<'、 '<='、 'LIKE'、 'NOT LIKE'、 'IN'、 'NOT IN'、 'BETWEENです。 '、' NOT BETWEEN '、' NOT EXISTS '、' REGEXP '、' NOT REGEXP '、または' RLIKE '。デフォルト値は '='です。 - コーデックス