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.
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' => '=' ] ] ); }