トップページ > ブログ > wordpressのサイト内検索にカスタムフィールドも含めたい!

BLOG

ブログ

UPDATE:2023.8.24

CATEGORY

wordpressのサイト内検索にカスタムフィールドも含めたい!

こんにちは、かずです。

前回に引き続きwordpressのカスタマイズについてです。
今回はサイトに実装されているとちょっと便利なサイト内検索について。

実装も難しくないんですが、問題が!

それは、wordpressのサイト内検索はデフォルトではカスタムフィールドに入れたテキストは含まれません。
そこで再びご用意いただくものは「functions.php」
こちらに以下を追記しましょう。

function filter_search($query){
if ($query->is_search() && $query->is_main_query() && !is_admin()) {
$post_array = array('post', 'page', 'hogehoge');
$contact_confirm = get_page_by_path('contact/confirm')->ID;
$contact_thanks = get_page_by_path('contact/thanks')->ID;
$not_in_array = array($contact_confirm, $contact_thanks);
$query->set('post_type', $post_array);
$query->set('post__not_in', $not_in_array);
}
}
add_filter('pre_get_posts', 'filter_search');
//検索
function custom_search($search, $wp_query){
global $wpdb;
if (!$wp_query->is_search) return $search;
if (!isset($wp_query->query_vars)) return $search;

$search_words = explode(' ', isset($wp_query->query_vars['s']) ? $wp_query->query_vars['s'] : '');
if (count($search_words) > 0) {
$search = '';

foreach ($search_words as $word) {
if (!empty($word)) {
$search_word = '%' . esc_sql($word) . '%';
$search .= " AND (
{$wpdb->posts}.post_title LIKE '{$search_word}'
OR {$wpdb->posts}.post_content LIKE '{$search_word}'
OR {$wpdb->posts}.ID IN (
SELECT distinct r.object_id
FROM {$wpdb->term_relationships} AS r
INNER JOIN {$wpdb->term_taxonomy} AS tt ON r.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN {$wpdb->terms} AS t ON tt.term_id = t.term_id
WHERE t.name LIKE '{$search_word}'
OR t.slug LIKE '{$search_word}'
OR tt.description LIKE '{$search_word}'
)
OR {$wpdb->posts}.ID IN (
SELECT distinct post_id
FROM {$wpdb->postmeta}
WHERE meta_value LIKE '{$search_word}'
)
)";
}
}
}
return $search;
}
add_filter('posts_search', 'custom_search', 10, 2);
インデントはあえて入れてませんが普段はタブ2個派です。

ちょっと解説。
3行目の$post_arrayには検索に含めいたい投稿タイプを記述します。
post → 投稿
page → 固定ページ
hogehoge → カスタム投稿タイプ
といった具合です。

4〜6行目は、検索に含めたくないページを指定しています。
この記述例ですと、お問い合わせのサンクスページや確認画面といった具合です。

たくさんカスタムフィールドを使って更新しやすくしたのに表示されないなんて切ないので是非有効活用してください!

それでは。

Happiness in Design

シアワセをデザインする会社

営業ゼロで年間600件以上
お問い合わせをいただいている
ノウハウを惜しみなく。

アプリコットデザインには創業当初から営業マンはいません。
創業当初からWEBを活用することに重点を置いて、これまで試行錯誤してきました。その結果、年間600件以上の問い合わせををこのホームページから得ています。ホームページという集客ツールを提供している私たち自身が、自社のホームページで集客できないのでは、お客様に自信を持ってオススメすることはできません。自社の実験から「WEBを活用して集客するためのノウハウを蓄積」した上で、誰よりもホームページの素晴らしさを知り、自信をもってお客様にご提供していきたいと考えます。

VIEW MORE

CONTACT

お問い合わせ・ご相談は
お気軽にどうぞ。

tel.0120-622835

営業時間/10:00〜18:00 
定休日/土日祝日

プロジェクト

それぞれの
らしさ溢れる日常を。

カフェ、トリミングサロン、ネイルサロン、スクール「tone village(トーンビレッジ)」

カフェ、トリミングサロン、ネイルサロン、スクール「tone village(トーンビレッジ)」

カフェ/ドッグサロン/
ネイルサロン/スクール

tone village

We're open.

採用情報

recruit info

豊かで彩りのある社会をつくる!

私たちは仕事を通して、一人でも多くの人が未来に対する希望を描けるような、そんなワクワクする社会をつくっていきたいと思っています。

VIEW MORE