theme の functions.php だとダメかもです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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に組み込んだところ、しっかり動作しました。