[WordPress] ユーザー名とか、タグ名・カテゴリ名も検索対象に

theme の functions.php だとダメかもです。


<?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 = '';
foreach ( $search_words as $word ) {
if ( !empty($word) ) {
$search_word = $wpdb->escape("%{$word}%");
$search .= " AND (
{$wpdb->posts}.post_title LIKE '{$search_word}'
OR {$wpdb->posts}.post_content LIKE '{$search_word}'
OR {$wpdb->posts}.post_author IN (
SELECT distinct ID
FROM {$wpdb->users}
WHERE display_name 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}'
)
) ";
}
}
}
return $search;
}
add_filter('posts_search','custom_search', 10, 2);


Posted

in

by

Comments

“[WordPress] ユーザー名とか、タグ名・カテゴリ名も検索対象に”. への9件のフィードバック

  1. kiharu (@bump_of_kiharu) のアバター

    11行目は、「!」が不要ではないでしょうか?

    1. wokamoto のアバター

      指摘ありがとうございます!
      修正しておきました。

  2. タカオ のアバター
    タカオ

    こういうのを探していたので助かりました。

    テーマのfunction.phpに追加する場合は
    <?php
    を消せばいいようです。

  3. kawano のアバター
    kawano

    これですごく助かってます!

    ところで、自分の検索では教えて頂いたコードを記入しても「ユーザー名」での検索にヒットしません。
    いろいろ検証してみたのですが全く分からず、コメントしました。

    1. wokamoto のアバター

      wp_users テーブルの検索条件に user_nicename も含めてみてはどうでしょう?
      具体的には 24 行目の下に以下の一文を追加します。

      OR user_nicename like '{$search_word}'
  4. kawano のアバター
    kawano

    で、できました。
    むちゃくちゃうれしいです!
    wokamotoさんありがとうございます!

  5. kawano のアバター
    kawano

    すいません。
    もう一つ関係ないことかもしれませんが、質問してもよろしいでしょうか?

    serch.phpで検索結果を表示させるとき、ヒット数が多ければ
     でpagenation.phpを取得し投稿の一定数以上は次ページに、としているはずなのですが

    なぜか  が機能せず、以降の記事へのリンクが表示されません。
    ほか(category.phpなど)では正しく次ページへのリンクが表示されるのですが…

    これでは2ページ目以降が閲覧できずに、しかも理由も分からず、とても困っています。

    良ければで構いません。
    理由や解決策をご存知であれば教えて頂けないでしょうか?

  6. kawano のアバター
    kawano

    phpコードが消えてしまいました。
    意味不明の空白部分は(〜で、〜が の前)はphpの get_template_part(‘pagenation’) です。

  7. しゅんぼー のアバター

    ありがとうございます!
    自作テーマのfunction.phpに組み込んだところ、しっかり動作しました。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。