2016-07-15 6 views
1

私はWordPressの検索結果を調整する方法を探していました。特定の親の下にある子ページをWordPressの検索結果から隠す方法

これは私が欲しいものです:私のサイトで

私はポスト、ページ&とカスタムポストタイプを持っています。今、他のページの子ページにある特定のページがあります。たとえば、Servicesと呼ばれる親ページがあり、その下に5つの子ページがあり、その下にABC ServiceXYZ Serviceという名前の子ページがあるとします。

  • 全ての記事

  • ページ(いないサービスページとその下のすべての子ページ):

    今私はワードプレスの検索結果では、唯一の次のものを返したいです。したがって、Servicesページと、親ページがServicesと設定されている5つの子ページ以外のすべてのページが検索結果に表示されます。

  • その他のカスタムポストタイプ

これは私がやったことです:

まず私は、サブページをチェックするために小さな関数を作成しました:

function ism_is_subpage() { 
    $post = get_post(); 

    if (is_page() && $post->post_parent) { 
     return $post->post_parent; 
    } else { 
      return false; 
    } 
} 

このI後それを渡すためにワードプレスpre_get_postsフィルタコールを作成しました。このように:

add_filter('pre_get_posts', function($query) { 
    if (!$query->is_admin && $query->is_search) { 
     $query->set('post_type', array('post', 'page', 'other-post-type1')); 
    } 
    return $query; 
}); 

は、しかし、問題は、私は私が私の望ましい結果を得ていない午前、ism_is_subpage()を呼び出すどんなにです。

お気軽にお問い合わせください。

答えて

1

ページのIDを知っている場合は、このような何か行うことができます:

add_filter('pre_get_posts', function($query) { 
    if (!$query->is_admin && $query->is_search) { 
     $query->set('post_type', array('post', 'page', 'other-post-type1')); //this line to specify post types as it is already in your question 
     $query->set('post_parent__not_in', array($post_id)); 
     $query->set('post__not_in', array($post_id)); 
    } 
    return $query; 
}); 

チェックPost and Page parametersをしてpre_get_posts hookは、クエリ変数オブジェクトが作成された後、呼び出されしかし前に、実際のクエリがあるされていることを心に留めておきます走る

EDIT

それは、あなたがポストタイプフィルタリング検索したいすべてのポストタイプを追加する必要がありますと「nav_menu_item」のようなdefault post typesを忘れてはいけないんあなたの質問にあった、などとしてまず$query->set(.....)ラインはい。投稿ID(親ページのID)は、たとえば44とする必要があります。

+0

こんにちは、お返事ありがとうございます。いくつかの質問を聞きたいんです。上記のpost_idの最初のページで、親ページを置いてもらいたいですか?また、私が言及したように、投稿、ページ、カスタム投稿タイプについて言及する方法はありません。私は検索にも表示したくないカスタムの投稿タイプがあるからです。 – iSaumya

+1

編集のチェックボックスをオンにします。 – ksno

+0

素晴らしい。編集していただきありがとうございます。だから私はもう 'ism_is_subpage()'は必要ないと思われます。最後の疑問が1つだけあります。 'post_parent__not_in'と' post__not_in'の両方を使う理由は?これは 'post__not_in'のようなもので、' Services'ページ自体が検索に表示されないようにします。 'post_parent__not_in'は、' Services'ページの子が検索に表示されないようにします。私は正しい? – iSaumya

関連する問題