カスタムフィールドの値をWordPressの検索対象に含める方法
今回の方法は、プラグインを使用せず、テーマ本体をカスタマイズする方法です。
カスタマイズと言っても、コピペだけなので簡単。
functions.phpに以下のコードを追記するだけです。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 = '';
$search .= "AND post_type = 'post'";
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 post_id
FROM {$wpdb->postmeta}
WHERE meta_value LIKE '{$search_word}'
)
) ";
}
}
}
return $search;
}
add_filter('posts_search','custom_search', 10, 2);
参考サイト:WordPressのサイト内検索でカスタムフィールドの内容も検索結果に含める方法
上記のコードを貼り付ければ、カスタムフィールドの値も検索対象となります。
投稿のカスタムフィールドに適当な値を登録して、その値をキーワード検索してみましょう。
検索結果にその投稿がヒットすれば、カスタマイズは成功しています。
余談ですが、WordPressの検索機能は、どうしてカスタムフィールドを検索対象としていないのでしょうか?カスタムフィールドを使う機会は多いと思いますし、検索対象にしても良いかと思うのですが・・・。
カスタムフィールドを検索対象にするか切り替えられる機能とかあれば、便利かと思います。
特定のカスタムフィールドのみ検索対象にしたい場合
先ほどの方法は、全てのカスタムフィールドの値が検索対象となりますが、場合によっては、特定のカスタムフィールドだけを検索対象にしたいことがあるかもしれません。
そんな時は、先ほどのコードではなく、下記のコードをfunctions.phpに追記しましょう。
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 = '';
$search .= "AND post_type = 'post'";
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 post_id
FROM {$wpdb->postmeta}
WHERE {$wpdb->postmeta}.meta_key IN ('カスタムフィールド名', 'カスタムフィールド名') AND meta_value LIKE '{$search_word}'
)
) ";
}
}
}
return $search;
}
add_filter('posts_search','custom_search', 10, 2);
参考サイト:WordPressの検索対象を特定のカスタムフィールドの値に限定する
上記のコードは少し調整が必要です。
赤文字部分に、検索対象にしたいカスタムフィールドの名前を記述しなければなりません。例えば、【test】と【sample】というカスタムフィールドを検索対象にしたい場合は、以下の様に記述してやります。
('test', 'sample')
検索対象とするカスタムフィールドの値が2つ以上ある場合は、
('カスタムフィールド名', 'カスタムフィールド名', 'カスタムフィールド名')
上記の要領でカスタムフィールド名を指定してやります。
このとき、最後のカスタムフィールド名の後ろに【,】は付けないでください。
これを付けてしまうと、正常に動作しなくなります。
まとめ
WordPressの検索機能でカスタムフィールドを検索対象にする方法をご紹介しました。
やることは一つだけ。
今回のコンテンツで紹介しているコードを、functions.phpに追記するだけです。
簡単なカスタマイズですので、興味のある方は挑戦してみてください。
WordPressに関するブログ、大変面白く勉強させていただいてます。
ただ、アーカイブページのページネーションがページ下部にしかなくちょっと不便です。ページ上部にも表示していただけると助かります。