it-swarm.com.de

Hauptabfrage durch benutzerdefinierte Abfrage ersetzen

Ich möchte die Hauptabfrage durch meine eigene benutzerdefinierte Abfrage ersetzen. Die Sache ist, ich möchte nicht durch den Aufwand des manuellen Blätterns gehen. Ich weiß, dass es einen Filter posts_results gibt, aber ich bin mir nicht sicher, wie ich ihn genau verwenden soll. Ich konnte keine Informationen dazu finden. Anscheinend ändert pre_get_posts die Abfrage nur, anstatt sie vollständig zu ersetzen. Ich habe versucht, meine Abfrage einfach in $posts abzulegen, aber dann habe ich das Paging verloren. Gibt es einen Weg, dies zu umgehen?

Ich benutze $posts = wpdb->get_results($query);, um die Hauptabfrage durch meine eigene zu ersetzen.

$query ist mein benutzerdefiniertes SQL. Ich füge das Snippet oben rechts unter get_header() hinzu. Ich versuche, die Hauptabfrage auf meiner benutzerdefinierten Taxonomieseite zu bearbeiten: taxonomy-mytax.php.

Die Situation

Derzeit hat mein Kunde Hersteller (Taxonomie) und Produkte (Taxonomie), dann ein tatsächliches Produkt (Custom Post Type). Sie baten darum, Produktposts (auf der Produktkategorieseite - taxonomy-producttax.php) in einer Reihenfolge ihres günstigsten Herstellers (Taxonomie) anzuzeigen. Deshalb habe ich der Herstellertaxonomie ein zusätzliches Feld hinzugefügt, in dem eine Nummer angegeben werden kann, die eine Bestellung deklariert. Diese Nummer wird in $wpdb->terms.term_group gespeichert. Jetzt versuche ich auf der Seite "Produktkategorie" die Hauptabfrage vollständig durch eine brandneue Abfrage zu ersetzen, die alle Produkte abruft und sie von einem Hersteller in die richtige Reihenfolge bringt term_group. Sowohl Product als auch Manufactuers (beide Taxonomien) haben eine Bestellung, und beide werden in $wpdb->terms.term_gruop abgelegt, was mühsam war. Ich habe eine benutzerdefinierte Abfrage erstellt, die funktioniert und Beiträge in der Reihenfolge term_group des Herstellers anzeigt. Ich muss nur die Hauptabfrage in taxonomy-producttax.php durch meine benutzerdefinierte SQL-Abfrage ersetzen, wollte aber nicht auf manuelles Paging zugreifen. Ich wollte alles verwenden, was Wordpress integriert hat, um mir zu helfen.

2
Howdy_McGee

Sie können die Hauptabfrage nicht durch die Ausgabe von $wpdb ersetzen. Die Hauptabfrage ist ein WP_Query Objekt. $wpdb gibt ein einfaches Array oder Objekt zurück, jedoch kein WP_Query-Objekt.

Selbst wenn Sie rohes SQL in eine Abfrage einbinden könnten (etwas in meinem Hinterkopf lässt mich glauben, dass Sie das können, aber ich kann es nicht beschwören), ist dies nicht ratsam. Versuchen Sie es mit var_dump($wp_query); und Sie werden feststellen, dass neben einer SQL-Abfrage noch viel anderes vor sich geht. Damit das Objekt funktioniert - einschließlich der von Ihnen gewünschten Paginierung -, muss alles andere richtig eingestellt sein.

Sie müssen pre_get_posts und möglicherweise andere Abfragefilter wie posts_where verwenden, um das WP_Query-Objekt zu ändern, nicht um es zu ersetzen. Ohne die Details zu kennen, die @Milo und @ChipBennett angefordert haben, die Sie jedoch nur zögern, wird es nicht möglich sein, Ihnen eine genauere Antwort zu geben.

3
s_ha_dum

Nun, es ist eine Taxonomie-Archivseite. Meine Abfrage ordnet Posts nach einer Kategoriereihenfolge, die der Benutzer festlegt. Ich müsste also die Auswahl, die Verknüpfung, die Position und die Reihenfolge ändern.

Ohne Ihren tatsächlichen Code zu sehen, ist es schwierig, eine genauere Antwort zu geben. Neben dem pre_get_posts action hook bietet WordPress jedoch mehrere Filter um die Abfrage noch früher zu bearbeiten:

Es gibt wahrscheinlich keinen wirklichen Grund, warum Sie die Hauptabfrage nicht entsprechend Ihren Anforderungen bearbeiten können:

Deshalb habe ich der Herstellertaxonomie ein zusätzliches Feld hinzugefügt, in dem eine Nummer angegeben werden kann, die eine Bestellung deklariert. Diese Nummer wird in $wpdb->terms.term_group gespeichert. Jetzt versuche ich auf der Seite "Produktkategorie" die Hauptabfrage vollständig durch eine brandneue Abfrage zu ersetzen, die alle Produkte abruft und sie von einem Hersteller in die richtige Reihenfolge bringt term_group. Sowohl Product als auch Manufactuers (beide Taxonomien) haben eine Bestellung, und beide werden in $wpdb->terms.term_gruop abgelegt, was mühsam war. Ich habe eine benutzerdefinierte Abfrage erstellt, die funktioniert und Beiträge in der Reihenfolge term_group des Herstellers anzeigt.

1
Chip Bennett