Aufmacher HTML Code

Kategorie in WordPress verstecken

Anzeige:

Heute war ich mal wieder im WordPress Plugin Directory unterwegs. Ich sichte nach einem klitzekleinen Plugin, das eine einzelne Kategorie „versteckt“. Ich wollte aber nicht, dass alle Beiträge in dieser Kategorie ebenso versteckt sind. Das Plugin soll mir nur diese eine bestimmte Kategorie in den einzelnen Blogeinträgen und in der Sidebar-Kategorieliste ausblenden. Ich möchte nämlich Beiträge erstellen, die zusätzlich in einer Kategorie abgelegt sind, die nirgendwo angezeigt wird. Die Liste aller Beiträge in dieser Kategorie soll aber über den direkten Aufruf der Kategoriearchivseite abrufbar sein. Klar soweit? Nein? Gut, hier ein praktisches Beispiel:

For the English translation of this blog post, visit Hide a single category in WordPress on rob_st’s workspace.

Ich poste ja immer wieder Bilder meines Flickr-Accounts. Diese möchte ich in die Kategorie „Flickr“ einsortieren. Die Kategorie „Flickr“ soll aber nicht unterhalb des Beitrags in der Zeile „Dieser Artikel wurde gepostet in: Fotografie und Flickr“ erscheinen. Hier soll nur „Dieser Artikel wurde gepostet in Fotografie“ stehen. Außerdem soll die Kategorie „Flickr“ nicht in der Seitenleiste unter „Kategorien“ angezeigt werden. Ich möchte aber, dass alle Beiträge in „Flickr“ über den Link /category/flickr angezeigt werden.

Zugegeben, das scheint eine ein abwägige Sache zu sein, aber es ist nur ein Beispiel.

Also habe ich, wie gesagt, das Plugin Directory durchsucht und irgendwie … nichts gefunden. Ich weiss nicht, ob es an der Suchfunktion an sich liegt, an den Beschreibungen der Plugins, oder an meinen Suchbegriffen („exclude category“, „category exclusion“, „category visibility“, etc.). Jedenfalls habe ich hier nichts wirklich brauchbares gefunden. Die meisten Plugins können nur eines: Wähle eine oder mehrere Kategorien XY aus und diese werden dann komplett versteckt. Also nicht nur in der Sidebar, im Feed und in den Beiträgen, sondern auch die Beiträge innerhalb dieser Kategorien werden ausgeblendet. Das hilft mir so nicht weiter.

Also habe ich die Suchmaschine meines Vertrauens bemüht. Ziemlich zügig kam ich dann darauf, dass ich wohl die WordPress-Funktion the_category „hacken“ muss. Denn genau hier möchte ich eingreifen und die Kategorie „verstecken“. Also habe ich an der Stelle weiter gegoogelt meine Suche weiter verfeinert und bin auf eine Lösung gestoßen, wie man einzelne Kategorien von der WordPress-Funktion the_category entfernen kann.

Der Code für die Kategorie-Einträge im Einzelbeitrag

Die Kategorie-ID erfährt man, in dem man im WordPress-Backend in der Kategorie-Bearbeitungsseite (/wp-admin/edit-tags.php?taxonomy=category) über die jeweilige Kategorie fährt bzw. den Link kopiert. Der sieht dann nämlich in etwa so aus: /wp-admin/edit-tags.php?action=edit&taxonomy=category&tag_ID=4&post_type=post. Das, was sich hier hinter der „tag_ID“ verbirgt, ist nämlich die Kategorie-ID.

Den Code für die Funktion übernehme ich hier ganz frech aus der o.g. Quelle:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function the_category_filter($thelist,$separator=' ') {
	if(!defined('WP_ADMIN')) {
		//Category IDs to exclude
		$exclude = array(17);
 
		$exclude2 = array();
		foreach($exclude as $c) {
			$exclude2[] = get_cat_name($c);
		}
 
		$cats = explode($separator,$thelist);
		$newlist = array();
		foreach($cats as $cat) {
			$catname = trim(strip_tags($cat));
			if(!in_array($catname,$exclude2))
				$newlist[] = $cat;
		}
		return implode($separator,$newlist);
	} else {
		return $thelist;
	}
}
add_filter('the_category','the_category_filter', 10, 2);

In der Zeile 4 trägt man die Kategorie-ID ein, die man ausschliessen möchte. Um mehrere Kategorien auszuschliessen, gibt man die Werte im Array einfach kommagetrennt ein, z.B. $exclude = array(1,7,25);

Damit wird dann die Kategorie, die anhand der ID(s) bestimmt wurde, nicht mehr im Beitrag angezeigt.

Das Kategorie-Widget

Der Eintrag der Kategorie wird nicht über die o.g. Funktion gesteuert. Hierfür brauchen wir eine andere. Dies wird aber im WordPress-Codex dokumentiert. Auch hier habe ich einfach den dort vorhanden Code per Copy & Paste verwendet:

25
26
27
28
29
30
31
32
33
34
function widget_categories_args_filter( $cat_args ) {
       $cat_list = array( 17 );
       if ( $cat_args['exclude'] ) {
               //TODO: write code to insert category ids into existing list
       } else {
               $cat_args['exclude'] = implode( ',', $cat_list);
       }
       return $cat_args;
}
add_filter( 'widget_categories_args', 'widget_categories_args_filter', 10, 1 );

Der Code sieht zwar wegen des Kommentars unvollständig aus, er tut aber trotzdem was er soll: nämlich aus dem Kategorie-Widget in der Sidebar (oder anderswo) die jeweilige Kategorie ausblenden.

Einbindung

Beide Funktionen müssen in der functions.php im WordPress-Theme eingebunden werden. Wer ein Standard-Theme verwendet, das regelmäßig vom Anbieter aktualisiert wird, dem empfehle ich das Anlegen eines Child-Themes. Das hat den Vorteil, dass bei der nächsten Theme-Aktualisierung die Einträge nicht verloren gehen.

Hinweise, wie ich den Code verbessern, verkleinern (verkürzen) kann, bin ich dankbar – da ich ja doch kein WordPress-Developer bin. Ich hab es so übernommen, wie es dort steht – und es funktioniert! 🙂

Anzeige:

Über Robert Steinhöfel

In Frankfurt lebender leidenschaftlicher Hobbyfotograf, Blogger, Marathoni, und Brooks Ambassador of Run Happy. Mit Google+-Profil und Portfolio bei Fotolia.

Noch kein Kommentar, sei der Erste!

Schreibe einen Kommentar

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