webentwicklung-frage-antwort-db.com.de

pre_get_posts Entferne tax_query wenn $ _GET ['tax'] == all

Ich verwende pre_get_posts zum Filtern mit $wp_query->set( 'tax_query', $tax_query );

Ich mache das wahrscheinlich besser mit einem new WP_Query, aber wenn jemand etwas weiß, würde ich es nicht gerne hören

Zum Beispiel:

/cpt/?taxo=this zeigt alle cpt's an, die einen taxo-term == this haben.

$taxo_terms = [];
if( !empty( $_GET['taxo'] ) ){
  $types = explode(',', $_GET['taxo']);
  foreach ($types as $key => $val) {
    $taxo_terms[$key] = sanitize_key($val);
  }
}
else{
    $taxo_terms[]='this'; // here's where things get ugly.
}

$tax_query = [];
if( !empty($taxo_terms) ){
  $tax_query[] = [
    'taxonomy' => 'taxo',
    'field' => 'slug',
    'terms' => $taxo_terms,
    'operator' => 'AND',
  ];
  $wp_query->set( 'tax_query', $tax_query );
}

Als nächstes möchte ich /cpt/?taxo=all hinzufügen, um alle Beiträge anzuzeigen, unabhängig davon, welchen taxo->terms sie haben.

Ich hoffe, mit tax_query einen Weg zu unset dem aktuellen pre_get_posts aus der Schleife zu finden.

Gibt es einen Weg zu $wp_query->UNSET?

Ich habe versucht, $wp_query->set( 'tax_query', null );

Der nächste Angriffsplan besteht darin, mit dem und/oder dem Bediener zusammenzuarbeiten, was hilfreich sein kann.

Vorschläge geschätzt. Kann bei Interesse mehr Kontext bieten. Vielen Dank!

edit: nützliche Technik hier gefunden: Lösche die Hauptabfrage und ersetze sie

1
admcfajn

Das hat es behoben! :) Hat-Tipp gmazzap für die nützlichen Informationen: Löschen Sie die Hauptabfrage und ersetzen Sie sie

function wpse_286813_omit_all( $query_vars ){

  // triggered also in admin pages
  if ( is_admin() )
    return $query_vars;

  if( !empty($query_vars['taxo']) && $query_vars['taxo'] === 'all' ){
    $query_vars['taxo']='';
  }
  return $query_vars;

}
add_filter( 'request', 'wpse_286813_omit_all' );
1
admcfajn