Empfohlene Methode zum Löschen einer ausstehenden Abfrage (in pre_get_posts)?

Es sieht so aus, als würde die coreabfrage eines E-Commerce-Plugins für mich in einer bestimmten Vorlage keinen Sinn machen, daher möchte ich sie komplett zugunsten meiner eigenen WP_Query-Schleifen in der Vorlage vercasting. Es ist nicht die Hauptabfrage, sondern ein sekundärer loop-Aufruf query_posts (), den ich downstream zu vercasting versuche.

wp remove query hat einige gute no-op reine SQL-Vorschläge, aber was wäre eine empfohlene Methode, um eine davon in diese spezifische $ query in pre_get_posts zu stecken?

Solutions Collecting From Web of "Empfohlene Methode zum Löschen einer ausstehenden Abfrage (in pre_get_posts)?"

Es gibt nicht wirklich eine Möglichkeit, die Hauptabfrage zu “stoppen”. Es gibt viele Filter, um es zu modifizieren, nur nichts, um es komplett abzuschalten. Das Beste, was Sie tun können, ist, sich in posts_request , das direkt vor dem Datenzugriff posts_request wird und eine leere Zeichenfolge oder etwas Unsinniges zurückgibt. Dies wird immer noch die database treffen.

Beispiel (ungetestet):

 < ?php add_filter('posts_request', 'wpse83187_posts_request', 10, 2); function wpse83187_posts_request($sql, $query) { if (!$query->is_main_query() /* other conditionals here! */) { return; } return ''; } 

Anstatt eigene WP_Query Looks in der Vorlage zu erstellen, setzen Sie die Abfrage einfach komplett mit pre_get_posts .

Verwenden Sie dann die “Main” -Schleife für mindestens eine Ihrer WP_Query-Schleifen. Keine database-Treffer passieren bis viel später, so dass der einzige “verschwendete” Overhead WP ist, der Abfrage-Vars füllt. WP_Query hat eine Methode namens init , die im Grunde alles zurücksetzt. Rufen Sie es auf und legen Sie die gewünschten Abfragevariablen fest. Dann müssen Sie parse_query erneut parse_query , um die verschiedenen Bedingungen einzurichten.

 < ?php add_action('pre_get_posts', 'wpse83187_reset_q'); function wpse83187_reset_q($query) { if (!$query->is_main_query() /* other conditionals here! */) { return; } $query->init(); // reset query vars here. eg: $query->set('post_type', 'product'); // re-run validation and conditional set up. $query->parse_query(); }