サポート » 使い方全般 » get_postsで全てのカスタムフィールドを検索対象にしたい。

  • 解決済 d.w.c

    (@dwc-1)


    ACFを利用してカスタムフィールドを多用し、サイトを作っています。
    絞り込み検索は 絞り込み検索をプラグインを使わずに実装 を参考に自作の絞り込み検索機能を使用しています。

    「Search Everything」プラグインをインストールして「すべてのカスタムフィールドを検索:(metadata)」にチェックを入れたのですが、カスタムフィールドが検索対象にならず、フリーワードの検索スペースに入力した検索語句が検索できません。
    また、プラグインを停止して最有効化したら何かが干渉して検索結果ページも自作のものが表示できなくなるなどの不具合が発生するようになってしまい、「Search Everything」は使うことができなくなりました。

    上記リンク先の方法で実装した絞り込み検索で、検索結果を取得する部分は

    $search_post = get_posts( array(
    		'tax_query' => $taxquerysp,
    		's' => $s,
    		'posts_per_page' => -1,
    		'post_type'      => 'hoge',       //カスタム投稿タイプ「hoge」内から選択
    		'orderby'        => 'meta_value',
    		'meta_key'       => 'time_stamp', //カスタムフィールド「time_stamp」順で表示
    		'order'          => 'desc'
    	    )
    	);

    となっています。

    このget_postsで検索対象を全てのカスタムフィールドの値(metadata)にすることはできますか?
    自分で調べた限りではよくわからず頭の中がこんがらがってしまいました。

    フリーワードに入力した検索語句は$sに、
    絞り込み検索用のチェックボックスの中身は$taxqueryspに格納されています。

    $taxqueryspの中身は下記のような感じのものが複数入っています。

    if($huga){
        $taxquerysp[] = array(
                'taxonomy'        => 'huga',
                'terms'           => $huga,
                'include_children'=> false,
                'field'           => 'slug',
                'operator'        => 'AND' //すべて合致した場合に取得
                );
    }

    特定のカスタムフィールドを検索対象にする方法を全フィールド分記入するのでもとりあえずいいのですが、フィールドのキーの数が膨大な量になるので、できれば特に指定しなくてもすべてを対象にする方法がとれれば便利だなと考えています。

    全てのカスタムフィールドを対象にする方法が無理ならば、特定のカスタムフィールドを検索対象にする方法を全フィールド分記入するやり方はどのようにすればいいかを教えていただけるととてもありがたいです。
    こちらはなんとなくやり方はイメージできるのですが、できればモニターの前でうんうんと呻る時間を減らしたいです。

    • このトピックはd.w.cが7年、 1ヶ月前に変更しました。
1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック投稿者 d.w.c

    (@dwc-1)

    自己解決しました。
    一応、記録しておきます。

    <?php //post-hoge.php
    $post_id = get_the_ID();
    $search_target_title = get_field('search_target_title');
    $title = get_the_title();
    
    if ( $search_target_title != $title ) {
    	update_post_meta( $post_id, 'search_target_title', $title ); 
    }
    ?>
    <?php //search.php
    if($s){
        $metaquerysp[] = array(
                array(
                    'key' => 'search_target_title',	//投稿タイトルをコピーして格納
                    'value' => $s, "compare" => "LIKE"
                ),
                array(
                    'key' => 'hogehoge',		//検索対象のメタキー
                    'value' => $s, "compare" => "LIKE"
                ),
                array(
                    'key' => 'hugahuga',		//検索対象のメタキー
                    'value' => $s, "compare" => "LIKE"
                ),///好きなだけ検索対象を増やす///
                'relation'=>'OR'
            );
    }
    
    $search_post = get_posts( array(
    	'tax_query' => $taxquerysp,
    //	 's' => $s,                  //削除
    	'meta_query' => $metaquerysp,
    	'posts_per_page' => -1,
    	'post_type' => 'hoge',       //カスタム投稿タイプ「hoge」内から選択
    	'orderby'   => 'meta_value',
    	'meta_key'  => 'time_stamp', //カスタムフィールド「time_stamp」順で表示
    	'order'     => 'desc'
        )
    );
    ?>

    's' => $sを残しておくといろいろ面倒だったので削除し、タイトル格納用のカスタムフィールドを新規で作成し、
    投稿ページのテンプレートにupdate_post_metaを設置して自動でタイトルを格納する仕組みを追加しました。
    自分はエディター内には何も書いてないのでそこに対する処理は無視してます。

    あとは$metaquerysp[]に検索対象にしたいカスタムフィールドをぶっこんで完成です。

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