2つのカスタム投稿タイプに2つのカスタム分類法を適用しました。サイドバーの用語リストは問題なく、それに関連するすべての投稿をリストします。ただし、特定の用語の1つを検索しても、その用語の投稿は表示されません。
例: http://dev.andrewnorcross.com/das/all-case-studies/ /「PQRI」という用語を検索
私は何もしません。何か案は?私はさまざまな検索プラグインを使用してみましたが、それらは私のカスタム検索パラメータを壊しているか、あるいは単に動作しません。
Search Everything プラグインもお勧めしますが、WPの検索機能を使用してこれを実装する場合は、Atomテーマで使用しているコードを次に示します。
// search all taxonomies, based on: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23
function atom_search_where($where){
global $wpdb;
if (is_search())
$where .= "OR (t.name LIKE '%".get_search_query()."%' AND {$wpdb->posts}.post_status = 'publish')";
return $where;
}
function atom_search_join($join){
global $wpdb;
if (is_search())
$join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id";
return $join;
}
function atom_search_groupby($groupby){
global $wpdb;
// we need to group on post ID
$groupby_id = "{$wpdb->posts}.ID";
if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby;
// groupby was empty, use ours
if(!strlen(trim($groupby))) return $groupby_id;
// wasn't empty, append ours
return $groupby.", ".$groupby_id;
}
add_filter('posts_where','atom_search_where');
add_filter('posts_join', 'atom_search_join');
add_filter('posts_groupby', 'atom_search_groupby');
それはTag-Searchプラグインに基づいています: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23
これは標準のWordPress検索ですか?なぜなら は分類法を含まないようだ (カテゴリやタグのように標準的なものでさえない)。コードはpost_title
とpost_content
で検索しますが、それ以外のものを含めたい場合は、posts_search
フィルターにフックする必要があります。
https://wordpress.stackexchange.com/a/5404/37612 上記のOnetrickponyの解決策を試してみましたが、これは素晴らしいことですが、問題が1つ見つかりました。 1つ小さな修正を加えます。
分類法に特殊文字が含まれている場合ドイツ語の「ウムラウト」(ö、ä、ü)と特殊文字を使用したoe、ae、ue instedaの検索 - 分類法のスラッグに検索を追加する必要があります - OR t.slug LIKE '%".get_search_query()."%'
検索クエリと分類法フィルタの組み合わせを検索する場合 - これもうまく機能します
しかし、問題は、分類フィルターのみを使用しようとした場合です。テキストが検索されない場合、検索フックは空の文字列をクエリに追加します。そのため、結果からすべての投稿が表示されます。フィルター分類単純なIFステートメントは問題を解決します。したがって、修正されたコード全体はこれになります(私にとっては問題なく動作します)。
関数custom_search_where($ where){ global $ wpdb; if(is_search()&& get_search_query()) $ where。= "OR((t .name LIKE '% "。get_search_query()。"%' OR t.slug LIKE '% "。get_search_query()。"%')AND {$ wpdb-> posts} .post_status = 'publish ') "; [ return $ where; } 関数custom_search_join($ join){ global $ wpdb; if(is_search()&& get_search_query()) $ join = "左結合{$ wpdb-> term_relationship} tr ON {$ wpdb->投稿} .ID = tr.object_id内部結合{$ wpdb- > term_taxonomy} tt ON tt.term_taxonomy_id = tr.term_taxonomy_id内部結合{$ wpdb-> terms} t ON t.term_id = tt.term_id "; return $ join; } function custom_search_groupby($ groupby){ global $ wpdb; //投稿IDでグループ分けする必要があります $ groupby_id = "{$ wpdb-> posts} .ID"; if(!is_search()|| strpos($ groupby、$ groupby_id)!== false ||!get_search_query())return $ groupby; // groupbyが空の場合、ours if(!strlen(trim($ groupby)))return $ groupby_id; //空ではなかった場合は、ours $ groupbyを返します。 "、"。$ groupby_id; } add_filter( 'posts_where'、 'custom_search_where'); add_filter( 'posts_join'、 'custom_search_join'); add_filter( 'posts_groupby'、 'custom_search_groupby');
Janと同じレベルの情報を持っています。プラグインで検索を拡張することも可能です。
おそらく すべて検索(Wordpress Plugin) はあなたが探しているものです。機能リストによると、現在はカスタム分類法をサポートしています。
私はonetrickponyからの答えは素晴らしいと思いましたが、それはどんな検索も単一の用語として扱い、また引用符で囲まれた検索フレーズを扱いません。これら2つの状況に対処するために、私は彼のコード(特にatom_search_where
関数)を少し修正しました。これが私の修正版です。
// search all taxonomies, based on: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23
function atom_search_where($where){
global $wpdb, $wp_query;
if (is_search()) {
$search_terms = get_query_var( 'search_terms' );
$where .= " OR (";
$i = 0;
foreach ($search_terms as $search_term) {
$i++;
if ($i>1) $where .= " AND"; // --- make this OR if you prefer not requiring all search terms to match taxonomies
$where .= " (t.name LIKE '%".$search_term."%')";
}
$where .= " AND {$wpdb->posts}.post_status = 'publish')";
}
return $where;
}
function atom_search_join($join){
global $wpdb;
if (is_search())
$join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id";
return $join;
}
function atom_search_groupby($groupby){
global $wpdb;
// we need to group on post ID
$groupby_id = "{$wpdb->posts}.ID";
if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby;
// groupby was empty, use ours
if(!strlen(trim($groupby))) return $groupby_id;
// wasn't empty, append ours
return $groupby.", ".$groupby_id;
}
add_filter('posts_where','atom_search_where');
add_filter('posts_join', 'atom_search_join');
add_filter('posts_groupby', 'atom_search_groupby');
私はWooCommerceカートプラグインでも同じ問題を抱えています。私の検索結果にはカスタム分類用語 'product_tag'が含まれていません。これは標準の投稿タグではないためです。私はこの問題についての他のStackOverflowスレッドで解決策を見つけました:
tkelly によるコード例は、私たちのカートプラグインの必要性に従って、彼の例の中のauthor
という用語をproduct_tag
に置き換えるときに私のために働きました。