Menu
テーマ切り替え

WordPress管理画面 プラグインなしでカスタムフィールドを検索に含める。

WordPress管理画面 プラグインなしでカスタムフィールドを検索に含める。

Wordpressの管理画面にある投稿一覧のワード検索にて、カスタムフィールドの内容をを含める方法です。カスタムフィールドを修正したいけど、記事が大量にあったりどこにあるのか分からない場合に重宝すると思います。

function cf_search_join( $join ) {
    global $wpdb;

    if ( is_search() ) {
        $join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
    }

    return $join;
}
add_filter('posts_join', 'cf_search_join' );

function cf_search_where( $where ) {
    global $pagenow, $wpdb;

    if ( is_search() ) {
        $where = preg_replace(
            "/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
            "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
    }

    return $where;
}
add_filter( 'posts_where', 'cf_search_where' );

function cf_search_distinct( $where ) {
    global $wpdb;

    if ( is_search() ) {
        return "DISTINCT";
    }

    return $where;
}
add_filter( 'posts_distinct', 'cf_search_distinct' );

WordPressの検索機能は「posts」テーブルのみ検索されるようになっているので、 カスタムフィールドがある「postmeta」テーブルとpostsテーブルを外部結合し、カスタムフィールドを含めるように検索クエリを変更。 重複したデータを除外してデータを取得するDISTINCTを指定しているみたいです。

参考サイト https://adambalee.com/search-wordpress-by-custom-fields-without-a-plugin/

Share:

RU DESIGNの無料Webツール集

画像処理、テキスト整形、AIツールなど、制作や作業を効率化する便利ツールをブラウザで無料公開中!

ツールを見る →
Contact & Request

お問い合わせ・お仕事のご相談

Webサイト制作、システム開発、サイト保守・改善などのご依頼や技術的なご相談を承っております。専用フォームよりお気軽にご連絡ください(2営業日以内にご返信いたします)。

フォームより24時間受付 初回ご相談・お見積り無料 全国オンライン対応
RU DESIGN
AUTHOR

RU DESIGN

Webサイト制作・システム開発・保守運用を手がけています。一般からナイト系まで幅広く対応し、制作で培った実践的なノウハウや技術知見、自作Webツールも公開中。制作のご相談もお気軽にどうぞ。