web-dev-qa-db-ja.com

カスタム投稿タイプを検索結果の一番上にプッシュする

投稿やページとは別に、私のサイトにはプロフィールがあります。検索結果の先頭に移動する方法はありますか。現在のところ、結果は最初にキーワードで、次に日付で並べられています。問題は、投稿(人物に関するもの、例えばアナウンスメント)はほとんどの場合プロフィールより新しいということです。それは論理的です:プロフィールは一度だけ追加され、投稿は継続的に投稿されています。だからプロファイルはトップ10にあるかもしれませんが、またそうではありません。名前が検索された人について10件の新しい投稿がある場合、その人のプロフィールはリストの中で深すぎます(一般的なケース)。間違っています。私がその人の名前を検索すると、profileが常に最も関連性の高いコンテンツなので、常に最初の結果になるはずです。

5
Tereza Vanacká

WP 3.7以降、検索の順序を設定できるフィルタ "posts_search_orderby" があります。

確実にフィルタが正しく機能するようにするには、"orderby""relevance"に設定します。

add_action( 'pre_get_posts', function( $query ) {
  if ( $query->is_search() ) {
    $query->set( 'orderby', 'relevance' );
  }
} );

そして、あなたのプロファイルのCPTスラッグが ""プロファイルであると仮定します。

add_filter( 'posts_search_orderby', function( $search_orderby ) {
    global $wpdb;
    return "{$wpdb->posts}.post_type LIKE 'profiles' DESC, {$search_orderby}";
});

このようにして、通常通り、検索されたキーワードが投稿のタイトルまたは投稿の内容に含まれているすべての投稿が表示されますが、順序は次のとおりです。

  1. 検索キーワードがタイトルでもコンテンツでも、降順で並べられたプロファイルCPTの投稿
  2. タイトルで検索キーワードを含む投稿、投稿の種類に関係なく降順で並べられた投稿
  3. コンテンツ内で検索キーワードを含む投稿、投稿の種類に関係なく降順で並べられた投稿
6
gmazzap

WordPressでは、検索結果を絞り込むことができます。デフォルトでは、投稿とページを検索しますが、税関の投稿タイプを追加することもできます。

function searchfilter($query) {

    if ($query->is_search && !is_admin() ) {
        $query->set('post_type',array('course','post','page'));
    }

return $query;
}

add_filter('pre_get_posts','searchfilter');

上記のコードは検索結果をフィルタリングして、投稿、ページ、コースなどの種類の投稿を提供します。

これがあなたに役立つことを願っています。