Benutzerdefinierter Suchfilter verursacht Probleme mit Menü und Abfrageposts

Ich verwende einen benutzerdefinierten Suchfilter (mit meinem benutzerdefinierten Abfrage-Var- type ), etwa so:

 function fteh_pre_get_posts( $query ){ if( isset( $query->query_vars['type'] ) ) $types = explode( ',', $query->query_vars['type'] ); $query->set( 'post_type', $types ); return $query; } if ( ! is_admin() ) { add_action( 'pre_get_posts', 'fteh_pre_get_posts' ); } 

Ich habe festgestellt, dass dies dazu führt, dass ein registriertes benutzerdefiniertes Menü nicht mehr angezeigt wird.

Ohne !is_admin() verwirrte es auch den Menü-Builder (er zeigte einige Posts anstelle aller meiner Seiten im Pages-Bereich). Das Hinzufügen der Bedingung half dabei, aber ich kann nicht herausfinden, wie ich meine Speisekarte zurückbringen kann.

Es ist richtig registriert und aufgerufen, erstellt und gespeichert in der richtigen Thema-Location und arbeitete vor dem Hinzufügen dieses Filters. Jetzt verwendet es nur die fallback_cb (in meinem Fall das Standard- wp_page_menu ) anstelle meines benutzerdefinierten Menüs.

Sobald ich diese Aktion von pre_get_posts lösche, ist alles wieder normal.

Ich sehe nicht, wie pre_get_posts hook mit den benutzerdefinierten Menüs verwandt ist – weiß jemand, warum es solch ein merkwürdiges Verhalten verursachen würde?

AKTUALISIEREN:

Ich habe jetzt ein anderes Problem entdeckt, das speziell durch das obige Snippet verursacht wurde – alle meine benutzerdefinierten Abfragen auf Seiten (einfache query_posts('post_type=organization') wie query_posts('post_type=organization') ) funktionieren nicht mehr und zeigen normale Posts anstelle von benutzerdefinierten Post-Typen in query_posts .

Solutions Collecting From Web of "Benutzerdefinierter Suchfilter verursacht Probleme mit Menü und Abfrageposts"

Verwenden Sie is_main_query() , um nur die Hauptabfrage zu ändern, damit das Menü nicht beeinflusst wird.

Versuche dies:

 add_action( 'pre_get_posts', 'fteh_pre_get_posts' ); function fteh_pre_get_posts( $query ){ if( !is_admin() && $query->is_main_query() && isset( $query->query_vars['type'] ) ) $types = explode( ',', $query->query_vars['type'] ); $query->set( 'post_type', $types ); return $query; }