Entfernen Sie einige Seiten aus der Suche

8

Auf meiner Website möchte ich, dass einige Seiten nicht über das Suchformular abgefragt werden können (daher werden sie nicht angezeigt, wenn ich so etwas wie www.ex.com/?s=banana habe).

Gibt es eine Möglichkeit, Seiten von der Suchergebnisseite zu "entfernen" (ohne blindlings eine Bedingung zu erfüllen, wenn is_page (id), Anzeige: keine)

Fredy31
quelle

Antworten:

14

In WP_Query () gibt es ein 'post__not_in'-Argument, mit dem Sie bestimmte Post-IDs ausschließen können.

Sie würden eine neue WP_Query in Ihrer search.php erstellen und die aktuellen $ query_args verwenden und dann Ihr 'post__not_in' hinzufügen.

Wenn Sie es dynamischer gestalten möchten, können Sie auch ein Post-Meta einbauen, in dem Sie eine Meta-Abfrage durchführen und alle ausschließen, für die "Ausschließen" aktiviert ist. (Suchen Sie in register_post_type nach 'register_meta_box_cb' ).

Zum Beispiel,

add_action('pre_get_posts','wpse67626_exclude_posts_from_search');
function wpse67626_exclude_posts_from_search( $query ){

    if( $query->is_main_query() && is_search() ){
         //Exclude posts by ID
         $post_ids = array(7,19,21);
         $query->set('post__not_in', $post_ids);
    }

}
Eric Holmes
quelle
3
+1. Wenn die von Ihnen ausgeschlossenen Beiträge zu einem bestimmten Beitragstyp gehören, können Sie sie von der Suche ausschließen, wenn Sieregister_post_type
Stephen Harris
1

Um alle Seiten von den Suchergebnissen auszuschließen (dh ohne manuell Seiten-IDs angeben zu müssen), finden Sie hier eine verbesserte Version der Funktion von @ EricHolmes:

add_action( 'pre_get_posts', 'wpse67626_exclude_pages_from_search' );
function wpse67626_exclude_pages_from_search( $query ) {

    // Manually supply Post/Page IDs to exclude from search results
    // $exclude_page_ids = array( 7, 19, 21 );

    // Or just get all page IDs
    $exclude_page_ids = get_all_page_ids();

    if (
        !$query->is_admin &&
        $query->is_search &&
        $query->is_main_query() &&
        !empty( $exclude_page_ids ) 
    ) {

        $query->set( 'post__not_in', $exclude_page_ids );

    }
}

Mehr Info:

(ALTERNATIVE) Obwohl Sie angesichts Ihrer Aktivitäten einfach exclude_from_searchden pageBeitragstyp auf einstellen können true, scheint mir dies der beste Weg zu sein, einen Beitragstyp von der Suche auszuschließen. Siehe dazu die Antwort von @ prettyboymp .

Mehr Info:

da ich bin
quelle