私は以前に関連した質問をしました、しかし私はついに私の問題の核心を解決したと思います。
私は Advanced Custom Fieldsを使用しています 私の投稿タイプにはいくつかのカスタムフィールドが添付されています。カスタムフィールドと値で投稿を受け取るようにURLを変更しようとしています。
そして私は本当に近づいています。これが現在my functions.php にあるものです。
add_action('pre_get_posts', 'my_pre_get_posts');
function my_pre_get_posts( $query ) {
if( is_admin() ) { return; }
$meta_query = $query->get('meta_query'); // get original meta query
if( isset($_GET['type']) ) {
$type = '"' . $_GET['type'] . '"';
$meta_query[] = array(
'key' => 'type',
'value' => $type,
'compare' => 'LIKE',
);
}
$query->set('meta_query', $meta_query); // update the meta query args
return; // always return
}
ACFはカスタムフィールドの複数の値を扱うときに直列化された配列を使うので、私はLIKE
クエリを使います。 type
カスタムフィールドは実際には複数の値を受け入れます。投稿を1つのtype
(つまり女性)で表示することができます。
website.com?type=women
しかし、複数のtype
(つまり、女性、男性、男の子)を検索しようとすると、うまくいきません。
website.com?type=women,men,boys
ここで直列化された配列を扱っていることに気付きました。複数のtype
をクエリしたいのであれば、その$type
変数を分解しなければなりませんでしたが、どちらもうまくいっていないようです。
誰もが助けることができるなら、私は解決策を切望しています。ありがとうございます。
編集|タイプごとに複数回:
$meta_query[] = array(
'relation' => 'OR',
array(
'key' => 'type',
'value' => 'men',
),
array(
'key' => 'type',
'value' => 'women',
),
array(
'key' => 'type',
'value' => 'boys',
),
);
私はちょうどそれをする方法を自分で考え出した
この例を見てください。
$args = array();
$args['relation'] = 'OR';
foreach ( $tag_ids as $t ) {
$args[] = array(
'key' => 'afz_entry_tags',
'value' => serialize( strval( $t->id ) ),
'compare' => 'LIKE'
);
}
$query->set( 'meta_query', $args );
私は$tag_ids
を通常のget_results
と一緒に取得しています。
それから私は必要なORを定義するためにmeta_queryのための配列の最初の項目を作成します。
次に、get_resultsから受け取ったオブジェクトのコレクションを繰り返し処理し、必要なだけの数のmeta_queryの配列を作成します。
それは魅力のように働きます。
LIKE
は配列値を取りません。あなたのオプションはおそらく:
OR
節が必要になるため、うまく動作しない可能性があります。REGEXP
compareを使用して複数の型を正規表現に結合すると、実行が非常に遅くなる可能性があります。