WordPressの検索機能は記事のタイトルと本文が対象になっている。
WordPress にカスタムフィールドを追加したので、カスタムフィールドの内容も検索対象にしたいので、方法を調べてみた。
functions.php に以下を追加した。
1 | add_filter( 'posts_join', function ($join){ |
1つめの add_filter( ‘post_join’ ) は、検索時に wp_posts と wp_postmeta を JOIN するように指定している。
2つめの add_filter( ‘posts_search’ ) が、今回のメインで検索対象を実際に指定している。
検索文字が複数あることを想定して foreach で WHERE 句に条件を追加している。wp_postmeta と JOIN しているので、wp_postmeta に保存された meta_key でカスタムフィールドの種別を指定し meta_values の値で検索できる。