管理画面の投稿一覧にある検索窓から、記事タイトル・記事内容だけでなく、カスタムフィールドに記入した値でも検索したいことがあると思います。
その方法については、もふLOGさんの記事に詳しく書いてあります。
https://mohulog.com/20180620_1732/
しかしながら、上に記載の方法だと、DBにある meta_value 全体を検索対象としてしまうので、カスタムフィールドフィールド以外の値も meta_value へ収納されていることから、意図した検索結果が得られない場面がありました。
上の画像は、カスタムフィールドへ設定した管理番号(meta_key:kanrinumber)で検索しようとしたところ、書いた記事全てが抽出してしまった事例です。
多分、全ての記事の meta_value へ 571 の値が収納されているのだと思います。
そこで、意図しない meta_value を除外し検索の精度を高める為に、検索に含める meta_key(=カスタムフィールド名) を指定する必要があります。
もふLOGさんの記事に記載してあるコードは、以下の通りです(書き換え箇所のみ抜粋)。
1 2 3 4 5 6 7 8 9 |
$search .= " AND ( {$wpdb->posts}.post_title LIKE '{$search_word}' OR {$wpdb->posts}.post_content LIKE '{$search_word}' OR {$wpdb->posts}.ID IN ( SELECT distinct post_id FROM {$wpdb->postmeta} WHERE meta_value LIKE '{$search_word}' ) ) "; |
カスタムフィールド名の kanrinumber の値のみを検索対象に含める場合は、上のコードを下のように書き換えればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$search .= " AND ( (wp_posts.post_title LIKE '{$search_word}') OR (wp_posts.post_excerpt LIKE '{$search_word}') OR (wp_posts.post_content LIKE '{$search_word}') OR ({$wpdb->posts}.ID IN ( SELECT distinct post_id FROM {$wpdb->postmeta} WHERE meta_key LIKE 'kanrinumber' AND meta_value LIKE '{$search_word}' )) )"; |
ただ、 kanrinumber の他に、 number の値も検索対象に含みたいことがあると思います。その場合は、以下のように書けばOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$search .= " AND ( (wp_posts.post_title LIKE '{$search_word}') OR (wp_posts.post_excerpt LIKE '{$search_word}') OR (wp_posts.post_content LIKE '{$search_word}') OR ({$wpdb->posts}.ID IN ( SELECT distinct post_id FROM {$wpdb->postmeta} WHERE (meta_key LIKE 'kanrinumber' OR meta_key LIKE 'number') AND meta_value LIKE '{$search_word}' )) )"; |
最後に。
中々、カスタムフィールドを検索対象に含むコードが検索しても出てこない中、上の記事を書かれたもふLOGさんには感謝しています。もふLOGさんの記事が無ければ、今回紹介したコードにはたどりつけませんでした。
ありがとう御座います。
出張ホスト募集要項