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); |
11行目は、「!」が不要ではないでしょうか?
指摘ありがとうございます!
修正しておきました。
こういうのを探していたので助かりました。
テーマのfunction.phpに追加する場合は
<?php
を消せばいいようです。
これですごく助かってます!
ところで、自分の検索では教えて頂いたコードを記入しても「ユーザー名」での検索にヒットしません。
いろいろ検証してみたのですが全く分からず、コメントしました。
wp_users テーブルの検索条件に user_nicename も含めてみてはどうでしょう?
具体的には 24 行目の下に以下の一文を追加します。
で、できました。
むちゃくちゃうれしいです!
wokamotoさんありがとうございます!
すいません。
もう一つ関係ないことかもしれませんが、質問してもよろしいでしょうか?
serch.phpで検索結果を表示させるとき、ヒット数が多ければ
でpagenation.phpを取得し投稿の一定数以上は次ページに、としているはずなのですが
なぜか が機能せず、以降の記事へのリンクが表示されません。
ほか(category.phpなど)では正しく次ページへのリンクが表示されるのですが…
これでは2ページ目以降が閲覧できずに、しかも理由も分からず、とても困っています。
良ければで構いません。
理由や解決策をご存知であれば教えて頂けないでしょうか?
phpコードが消えてしまいました。
意味不明の空白部分は(〜で、〜が の前)はphpの get_template_part(‘pagenation’) です。
ありがとうございます!
自作テーマのfunction.phpに組み込んだところ、しっかり動作しました。