Ändern von Metaabfrage in Parse_Abfrage

Im parse_query Filter Hook mache ich:

 if ( is_admin() && $pagenow == 'edit.php' && isset( $_GET['ysr_homepage_filter'] ) && $_GET['ysr_homepage_filter'] == '1' ) { if ( ! $query->meta_query ) { $query->meta_query = new WP_Meta_Query( [ [ 'key' => 'ysr_home_sticky', 'value' => '1', 'compare' => '=' ] ] ); } } 

Versuchen, nach einem bestimmten Meta in der Dashboard-Auflistung für einen bestimmten benutzerdefinierten Post-Typ zu filtern.

Das benutzerdefinierte Feld ist das richtige, und ich suche erfolgreich in anderen WP_Queries dafür, aber anscheinend ist das, was ich hier mache, nicht die richtige Art, Dinge zu tun, da meine Ergebnisse davon unberührt bleiben. Code läuft dort richtig durch, und ich kann sehen, dass $ query-> meta_query auf meine neue WP_Meta_Query gesetzt ist, aber das scheint keine Rolle zu spielen.

Irgendwelche Hinweise darauf, was ich falsch mache? Gibt es einen anderen Haken, sollte ich mich einhaken? Eine andere Möglichkeit zum Erstellen der neuen Meta-Abfrage für das vorhandene Abfrageobjekt?

Danke im Voraus.

Solutions Collecting From Web of "Ändern von Metaabfrage in Parse_Abfrage"

Direkt nachdem der pre_get_posts Hook ausgetriggers wurde, wird das öffentliche meta_query Attribut von WP_Query überschrieben mit:

 $this->meta_query = new WP_Meta_Query(); $this->meta_query->parse_query_vars( $q ); 

woher

 $q = &$this->query_vars; $q = $this->fill_query_vars($q); 

Ich denke also nicht, dass es funktionieren wird, um dieses Attribut zu modifizieren, so wie du es vor dem pre_get_posts des pre_get_posts tun pre_get_posts .

Stattdessen müssen wir die Argumente meta_query durch den Teil WP_Query der WP_Query .

Versuchen Sie zum Beispiel dies stattdessen:

 if ( ! $query->get( 'meta_query' ) { $query->set( 'meta_query', [ [ 'key' => 'ysr_home_sticky', 'value' => '1', 'compare' => '=' ] ] ); }