Gibt es eine einfache Möglichkeit, Beiträge abzufragen, die mit einem Begriff aus einer bestimmten Taxonomie versehen sind?
Ich kenne diese Technik:
$custom_taxonomy_query = new WP_Query(
array(
'taxonomy_name' => 'term_slug',
)
);
Aber ich möchte entweder einen Platzhalter anstelle von term_slug oder nur eine leere Zeichenfolge übergeben. Dann würde ich alle Beiträge erhalten, die mit einem Begriff in dieser Taxonomie gekennzeichnet sind, nicht nur mit einem bestimmten Begriff.
Danke für deine Hilfe, Dave
So etwas könnte funktionieren:
Grundsätzlich fragen Sie nach einem Beitrag, der einem Begriff in Ihrer_Custom_taxonomy zugewiesen ist.
quelle
Hallo @ Dave Morris:
Sie haben Recht, WordPress entscheidet, wenn Sie keinen Begriff haben, wird Ihre Taxonomie einfach ignoriert.
Es gibt drei (3) Hauptansätze, die Sie ausprobieren können:
Verwenden Sie eine vollständige SQL-Abfrage mit
$wpdb->get_results()
,Holen Sie sich eine Liste von
$post->ID
s für alle Beiträge in Ihrer Taxonomie und übergeben Sie sie dann mit dem'post__id'
Argument oderKommentieren Sie die von SQL verwendete SQL
WP_Query
mit einem der Hooks, mit denen Sie eine SQL hinzufügen können, dieINNER JOIN
auf die Taxonomietabellen verweist.Ich versuche, vollständiges SQL in WordPress zu vermeiden, bis entweder nicht geholfen werden kann oder einfach eine Liste mit IDs zurückgegeben wird. Und in diesem Fall würde ich es vermeiden, eine Liste von
$post-ID
s zur Verwendung mit dem'post__id'
Argument abzurufen, da dies zu Leistungsproblemen und sogar zu Speicherproblemen führen könnte, wenn Sie viele Beiträge hätten. Damit haben wir Platz 3.Ich habe eine Klasse erstellt auszudehnen
WP_Query
genannt ,PostsByTaxonomy
die verwendet den'posts_join
"Haken. Sie können es hier sehen:Sie würden diese Klasse wie unten gezeigt aufrufen. Das Argument
'taxonomy'
ist eine erforderlich , aber Sie können jeder passieren (alle?) Die anderen Parameter , dieWP_Query
auch erwartet, wie zum Beispiel'posts_per_page'
:Sie können die
PostsByTaxonomy
Klasse in diefunctions.php
Datei Ihres Themas kopieren oder sie in einer.php
Datei eines Plugins verwenden, das Sie möglicherweise schreiben.Wenn Sie es schnell testen möchten, habe ich eine eigenständige Version des Codes in Gist veröffentlicht, die Sie herunterladen und in das Stammverzeichnis Ihres Webservers kopieren können
test.php
, für Ihren Anwendungsfall ändern und dann über eine URL wie Ihren Browser anfordern könnenhttp://example.com/test.php
.AKTUALISIEREN
Versuchen Sie Folgendes, um Sticky Posts aus den in der Abfrage enthaltenen Posts zu entfernen :
Oder wenn es Ihnen wichtig ist, dass die
PostsByTaxonomy
Klasse niemals klebrige Beiträge enthält, können Sie sie in den Konstruktor einfügen:UPDATE 2
Nach dem Posten der oben genannten Informationen habe ich erfahren, dass 'caller_get_posts' veraltet ist und
'ignore_sticky_posts'
in WordPress 3.1 verwendet wird.quelle
caller_get_posts=1
und sie verschwinden sollten: codex.wordpress.org/Function_Reference/… Hoffe, das hilft.if(isset($query->posts_by_taxonomy))
ist ein schöner Trick, um die objektorientierte Methodik mit der Hook-Methodik von WordPress zu kombinieren.Sie sollten nur in der Lage sein, die Taxonomie festzulegen und zu negieren, um einen Begriff einzuschließen.
Z.B.
Dies entspricht in etwa der Abfrage, die ein Taxonomiearchiv ausführt.
quelle
WP_Query
einfach weggeworfen.WP_Query
ist leider nicht so elegant implementiert. Es sind fast 1200 Zeilen fest codierter Sonderfälle.