atm で作業している Wordpress サイトのかなり高度な検索を作成しました。訪問者がさまざまな分類法で結果をフィルタリングし、日付またはカスタム フィールドで並べ替えたり、通常のフリー テキスト検索 (WP がデフォルトで提供) を実行したりできるようにします。
私はpre_get_posts
フィルターを使用して、次のように自分のものをクエリに追加するだけでこれを達成しました: (いくつかのサニティチェックやその他のコードを省略していることに注意してください)
<?php
add_filter('pre_get_posts', 'my_search');
function my_search ($qry) {
# Include more post types
$qry->set('post_type', array('foo', 'bar'));
if ($_GET['myorder'] == 'price') {
$qry->set('orderby', 'meta_value_num');
$qry->set('meta_key', 'price');
$qry->set('order', 'ASC');
}
else {
$qry->set('orderby', 'date');
$qry->set('order', 'DESC');
}
}
次に、投稿を並べ替える別の方法、つまり関連性を追加したいと思います。これは非常に一般的な要求であり、私が見た問題のほとんどの解決策には、Relevanssi プラグインの使用が含まれていることを理解しています。私はすでに独自の「プラグイン」(まあ、少なくともコード)を作成し、それを使用するようにすべての検索フォームとリストを設定しているため、この時点で Relevanssi に切り替えるのは簡単ではありません。
すっごく、私がすでに持っているコードでこれを追加する(できれば)簡単な方法を誰かが知っているかどうか知りたいですか?
私が理解している限り、WP はLIKE
代わりに を使用して検索を行います。そのため、ソートする関連性スコアすらありMATCH()
ません。これが正しければ、自分のクエリを完全に作成する必要があると思いますか? WPのページネーションなどを台無しにせずにこれを行うにはどうすればよいですか? または、あなたが推測するようなものを追加できますか?$qry->set('WHERE', "MATCH(post_content) AGAINST('$q' IN BOOLEAN MODE) AS relevance"); $qry->set('sortby', 'relevance')