WordPress: Schlagwortwolke (Tag-Cloud) aus Kategorien

Update vom 20. Dezember 2012: Der Widget unten wird demnächst als WordPress-Plugin freigegeben, damit man nicht immer den Code im Theme selber einbauen muss.

Mit einer Schlagwortwolke (Tag-Cloud) kann man sehr einfach eine Liste von Schlagwörtern kompakt und übersichtlich darstellen. Hier ein Beispiel aus unserer Webseite:

Man kann mit folgender Funktion eine Schlagwortwolke programmatisch anzeigen:

Zusätzlich zu diesen Parameter kann man auch exclude verwenden, um bestimmte Tags auszuschließen. Umgekehrt mit include kann man eine Liste von Tags definieren, die angezeigt werden sollen.

Wenn man aber einen Bereich hat, wo man nur ein Teil der Artikel sehen kann d.h. nur eine oder mehrere Kategorien, macht es Sinn in der Tag-Cloud nur die Tags anzuzeigen, womit Artikel aus dieser Kategorie bzw. aus diesen Kategorien markiert wurden. Die include Option von wp_tag_cloud zu verwenden ist keine gute Lösung, da man die Liste dann ständig erweitern muss. Am besten wäre es, wenn man einfach eine Liste von Kategorien definieren könnte, die berücksichtigt werden müssen. Das kann man leider mit dem Tag-Cloud-Widget in WordPress nicht erreichen. Aber kann mit dem hier vorgestellten Widget gemacht werden.

Man kann den Titel des Widgets konfigurieren und auch eine oder mehrere Kategoriene aus der Liste aller Kategorien wählen:

Es werden dann alle Tags angezeigt, womit Artikel in einer dieser Kategorien markiert wurden. Ein Beispiel davon kann man hier rechts sehen.

Hier der Code zum Widget:

Wenn der Widget oben in der Datei aw-widgets.php im Theme gespeichert wurde, kann man den Widget im Theme aktivieren, in dem man folgendes in functions.php einfügt:

Der Widget macht folgendes:

Es wird eine Liste von Kategorie-IDs im Widget definiert. Der Widget führt dann eine SQL-Abfrage, um eine Liste von relevanten Tags zu bekommen. Der WordPress 3 Modell sieht so aus:

Die relevante Tabellen haben eine blaue Kopfzeile.

Beide Kategorien und Tags sind Terms. Sie sind also in der Tabelle wp_terms gespeichert und werden durch eine term_id identifiziert. Ob es sich um eine Kategorie oder einen Tag wird mit der Zuweisung einer Taxonomie definiert. Es geschieht, wenn die term_id in der wp_term_taxonomy Tabelle referenziert wird. Wenn man nur mit der term_id arbeitet, braucht man also die wp_terms Tabelle nicht, dann reicht nämlich die wp_term_taxonomy Tabelle.

Um alle Tags zu holen, kann man folgende SQL-Abfrage ausführen:

Ähnlich kann man die Kategorien holen:

Wenn man jetzt nach Tags die zu einem Artikel gehören, muss man die wp_term_taxonomy Tabelle mir der wp_posts Tabelle verbinden. Man kann sie nicht direkt sondern über die wp_term_relationships Tabelle verbinden.

Man bekommt so eine Liste von allen Posts in einer diesen 3 Kategorien. Jetzt muss man nur noch die Tags für diesen Artikel finden:

Man bekommt so alle Tags für diese 3 Posts. Wenn man jetzt beide Abfragen kombiniert:

Wenn man dann eine Liste von Tags hat, kann man einfach das include Attribut beim Aufruf der wp_tag_cloud Funktion verwenden, um die neue Schlagwortwolke anzuzeigen.

19. Dezember 2012

+

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.