it-swarm.com.de

Wie kann ich Begriffe am leistungsstärksten von der Hauptabfrage ausschließen?

Dieses Q ist eine Fortsetzung dieser Antwort auf das Q: "So schließen Sie einen bestimmten Begriff für die Suche aus " .

4 Möglichkeiten, Beiträge mit einem bestimmten Begriff herauszufiltern

Type                | Pro                   | Contra
--------------------------------------------------------
Run a new query     | Easy to implement     | Add. Queries
                                            | Add. time to execute the DB call + processing the parsing of the results
Inside the loop     | Easy to implement     | Sometimes Add. Queries
                                            | Add. time to execute
Modify the query    | Full control          | Hard to implement
                                            | Needs a lot of knowledge (preparing, DB interaction)
Add new query parts | No perform. impact    | Hard to get around
                    | Secure
                    | Full core support

Der erste Typ imho ist keine Option. Die "Typen" 2 & 3 sind bereits im anderen Q beantwortet und beide haben noch einige Rückzüge.

Frage:

  1. Wie kann der Hauptabfrage ein zusätzliches tax_query-Argument hinzugefügt werden, indem (z. B.) der pre_get_posts-Filter verwendet wird?
  2. Kennen Sie zusätzliche Möglichkeiten zum Ändern der Hauptabfrage?
4
kaiser

Sie können die Taxonomieabfrage für die Hauptabfrage mit pre_get_posts festlegen:

add_action( 'pre_get_posts', 'my_exclude_terms_from_query' );
function my_exclude_terms_from_query( $query ) {
    if ( $query->is_main_query() /* && whatever else */ ) {
        $tax_query = array (
                array(
                    'taxonomy' => 'category',
                    'terms' => array( 'cat-slug' ),
                    'field' => 'slug',
                    'operator' => 'NOT IN',
                )
        );
        $query->set( 'tax_query', $tax_query );
    }
}

Wenn tax_query bereits festgelegt ist und Sie ihn stattdessen ändern müssen, können Sie das $tax_query-Array abrufen und anschließend hinzufügen.

6
helenhousandi