hirokonaBlog

ググる→忘れそう→即時メモ 京都のWebデザイナーの備忘録

wp 検索・絞り込み

検索

カスタムフィールドをサイト内検索の対象にする「Search Everything」[WordPress]

カスタムフィールドをサイト内検索の対象にする「Search Everything」[WordPress]

絞り込み(検討中のコード)

うーん、色いろあるみたいだ
https://ja.forums.wordpress.org/topic/23237

絞り込み(暫定のコード)

暫定ではこんな感じになってますー。
でも上に書いた(検討中のコード)で全部できるならそれでええやんってかんじですね。。
ちなみにここにいたるまでの古いコードは下の方に書いてますがあくまで参考までに。

function.php

//検索クエリのカスタマイズ(全体のものと店舗のもの)
function customize_main_query($query) {
    if ( is_admin() || ! $query->is_main_query() )
        return;
    if ( $query->is_search() && $query->is_post_type_archive('products')) {
        $s = $_GET['s'];
        $area = $_GET['area'];
        $low = $_GET['low'];
        $post_tag = $_GET['post_tag'];
        $hideClosed = $_GET['hideClosed'];

        if($post_tag){
            $taxquerysp[] = array(
                    'taxonomy'=>'post_tag',
                    'terms'=> $post_tag,
                    'include_children'=>false,
                    'field'=>'slug',
                    'operator'=>'AND'
                    );
        }

        if($area){
            $taxquerysp[] = array(
                    'taxonomy'=>'area',
                    'terms'=> $area,
                    'include_children'=>false,
                    'field'=>'slug',
                    'operator'=>'AND'
                    );
        }
        $taxquerysp['relation'] = 'AND';

        if($hideClosed){
            $metaquerysp[] = array(
                    'key'=>'shop_outOfBusiness',
                    'value'=> '0'
                    );
        }

        if($low){
            $metaquerysp[] = array(
                        'key'=>'shop_openingday',
                        'value'=>array( $low, date("Ymd", strtotime("$low 10 year")) ),
                        'compare'=>'BETWEEN',
                        'type'=>'DATE',
                        );
            $metaquerysp['relation'] = 'AND';
        }
        $query->set('tax_query' , $taxquerysp);
        $query->set('meta_query' , $metaquerysp);
        $query->set('s' , $s);
    }
}
add_action( 'pre_get_posts', 'customize_main_query' );

上記の絞り込みコードにいたったわけ

絞り込み検索をプラグインを使わずに実装[WordPress]

絞り込み検索をプラグインを使わずに実装[WordPress]

↑がめっちゃよくまとまっていたので、ゴニョゴニョしながらカスタムしていたのですが、
最後にクエリを渡すところでつかってるquery postsについてなにげに公式で検索したら、あんまり使うなよ!押すな押すなよ!重くなるぞ!!って書いてあるヒーーーー!

テンプレートタグ/query posts – WordPress Codex 日本語版
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts

で、かわりにpre get postsとか使いなさいよあーた!と書いてある。

プラグイン API/アクションフック一覧/pre get posts – WordPress Codex 日本語版
http://wpdocs.sourceforge.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7/pre_get_posts

中盤にあるパプリカみたいな色合いのフロー図をみると、うむ。たしかに効率の悪そうなフローになっとるな。うーん、重くなるのはやだな。ちょっときちんと調べて自作しよーと。

というわけでそもそも何なのってのを解りやすく解説してるページを探す
なにもしらない子羊ちゃんなので。メーメー。
「wp query query posts 違い」

hijiriworld Web
http://hijiriworld.com/web/wordpress-loop/

query_postsとget_postsの違い[追記あり] | notnil creation weblog
http://notnil-creative.com/blog/archives/1384

ふーん。なんか知らんがメインで設定されているクエリをむりくり上書きするのね?
で、きた。本題。っておもったらcodex訳してくれてる人だった。ありがたやありがたや。
そのものスバリの記事があった。
query_postsを捨てよ、pre_get_postsを使おう【追記あり】【報告あり】 | notnil creation weblog
http://notnil-creative.com/blog/archives/1688

で、なにをどうかきかえんねん。めんどいんかな、いやだな、っておもったら結構さくっとできた。

「query_posts」を「WP_Query」「pre_get_posts」に書き換える方法 | 株式会社まちいろ 〜 街に真心と感動を増やすIT企業
http://www.machiiro.jp/machiblog/blog/query_posts/

おお、さくっとできそうだ。しかも対応が必要なページが増えても、記述変えるだけでよいので、べんりね。

というわけでした。

総合と下層でテンプレートを変更する場合

WordPress › フォーラム » 検索結果ページを振り分けたい
https://ja.forums.wordpress.org/topic/13350


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください