• 解決済 greon999

    (@greon999)


    カスタムフィールドのキー名、その値、そしてカスタムフィールド数の制限なしで、カスタムフィールドを対象にした検索機能を作成しています。
    検索ボタンを押したらパラメータ付きのURLとなり、そのパラメーターの値を持っている記事だけを一覧にする方法で取り組んでいます。

    検索

    https://exsample.com/?カスタム1=〇&カスタム2=△&カスタム3=□

    一覧は

    $loop = new WP_Query( array(
    'meta_query' => array(
        'relation' => 'OR', //もしくは'AND'
        array('key' => 'カスタム1', 'value'=> '〇'),
        array('key' => 'カスタム2', 'value'=> '△'),
        array('key' => 'カスタム3', 'value'=> '□'),
    ),
     ) );
    if ($loop->have_posts()):
    ・・・

    でちゃんと表示されるところまで出来ています。

    問題は、カスタムフィールドにとにかく制限がないので、
    https://exsample.com/?あああ=〇&イイイ=△&UUUううう=□&えeeeえ=●&おオおオおオおオ=●
    など、パラメーター名も数も可変するものに対してどう対応するか、なのです。

    カスタムフィールドのキー名を取得する関数は作成しているので、その関数を get_fields_grep() として

    $field_key = get_fields_grep();
    foreach($field_key as $key){
     echo $key.',';
    }

    という感じで、先述のURLで言えば(あああ,イイイ,UUUううう,えeeeえ,おオおオおオおオ,)を取得することはできています。

    ならばと、

    $loop = new WP_Query( array(
    'meta_query' => array(
        'relation' => 'OR',
        foreach($field_key as $key){
        array('key' => $key, 'value'=> $_GET[$key]),
        }
    ),
     ) );
    if ($loop->have_posts()):
    ・・・

    と言う感じで、配列内にforeachを使ってみましたが、エラーになります。

    配列内にループは使えないのがphpの基本なのかもわかってないのですが、とにかくは数も値も決まっていない
    array('key' => $key, 'value'=> $_GET[$key]),
    の個所をどうすればよいのか悩んでいます。

    思いつく方法や助言のある方がいらっしゃれば、お教えいただけると幸いです。
    よろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちは

    配列内にループは使えないのがphpの基本なのかもわかってないのですが、

    配列は、特定の数のカンマで区切られた「キー => 値」または「値」を引数とします。

    例:

    $meta_query = array( 'relation' => 'OR' );
    $field_key = get_fields_grep();
    foreach ( $field_key as $key ) {
    	$meta_query[] = array( 〇〇〇 );
    }
    $loop = new WP_Query( array(
    	'meta_query' => $meta_query,
    ) );
    トピック投稿者 greon999

    (@greon999)

    >ishitakaさん
    ありがとうございます。解決しました!

    $meta_query = array( 'relation' => 'OR' );
    $field_key = get_fields_grep();
    foreach ( $field_key as $key ) {
    	$meta_query[] = array('key'=>$key,'value'=>$_GET[$key]);
    }
    $loop = new WP_Query( array(
    	'meta_query' => $meta_query,
    ) );

    で期待通りの動作になりました。
    $meta_query[]
    の[]で配列に要素を追加できることも勉強できました。

    本当にありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「カスタムフィールド検索機能自作で困っています。」には新たに返信することはできません。