WordPress: Kategorien im Kategorien-Widget exkludieren

Kürzlich mussten im WordPress Widget für Kategorien, einzelne Kategorien exkludiert werden und damit du nicht ewig danach suchen musst, gibt es hier den kurzen Schnipsel inklusive einer kleinen Erläuterung dazu. Außerdem erfährst du hier, wie du die ID einer Kategorie herausfindest.

Wer viel schreibt, hat irgendwann auch viele Kategorien, zumindest wenn er sich nicht vorher Gedanken darüber gemacht hat, wie er eigentlich arbeiten will. Ich für meinen Teil habe 9 Kategorien und sehr viele Schlagwörter. Dabei sind die Kategorien meine Kategorien und die Schlagwörter eben die Schlagwörter innerhalb dieser Kategorie. Hier im Beitrag wird die Kategorie Schnipsel und das Schlagwort WordPress verwendet. Also WordPress Schnipsel sozusagen. Wenn man sich vorher ein paar Gedanken dazu gemacht hat, kann man so ziemlich alle Beiträge einfach kategoriesieren und spart sich so unzählige Kategorien.

Jetzt gibt es aber das Problem, dass man zisch Beiträge geschrieben und sie in zisch Kategorien gepackt hat. Das jetzt wieder auseinander zu bekommen ist etwas arbeit (die sich lohnt, auch wenn man Google danach neu anlernen muss, weil auf einmal Beiträge in Kategorien fehlen, oder Kategorien-URLs nicht mehr existieren). Damit du kein zu überfülltes WordPress Kategorien Widget in deiner Sidebar hast, kannst du Kategorien mit einem PHP-Schnipsel ausblenden. Dabei musst du allerdings die genaue ID der einzelnen Kategorie wissen und die findest du ganz einfach:

  • Klicke zuerst in deinem WordPress Admin auf eine der Kategorien, innerhalb von Beiträge -> Kategorien. Du müsstest dort deine Kategorie dann bearbeiten können.
  • Innerhalb dieser Bearbeitung findest du oben in der Adresszeile jetzt die ID, direkt hinter dem Gleichzeichen von tag_ID – das ist die ID der Kategorie. Diese musst du dir jetzt notieren, weil wir sie gleich brauchen werden. (Beispiel-URL: /admin/term.php?taxonomy=category&tag_ID=1&post_type=post)

Jetzt hast du die IDs herausgefunden. Nun wollen wir die Kategorien exkludieren und damit sie nicht mehr im WordPress Kategorien-Widget erscheinen. Dafür packst du folgendes in die functions.php deines Themes oder dein Plugin:

/**
 * Kategorien im WordPress Kategorien Widget exkludieren
 *
 * @param array $args widget arguments.
 *
 * @return array
 */
function exclude_categories( $args ) {

	/**
	 * In diesen Array packst du deine zuvor aufgeschriebenen Kategorien rein
	 * trenne einzelne Kategorien mit einem Komma. Beispielsweise: 1, 2, 3, 4
	 */
	$categories = [ 1, 2, 3, 4, 5 ];

	/**
	 * Hier wird erst geprüft, ob nicht schon Kategorien die exkludiert werden
	 * sollen, existieren. Wenn ja, werden die beiden Kategorien zusammengeführt
	 * und wenn nein, werden lediglich deine Kategorien exkludiert.
	 */
	if ( isset( $args['exclude'] ) ) {
		$defaults        = $args['exclude'];
		$defaults        = explode( ',', $defaults );
		$categories      = array_merge( $defaults, $categories );
		$args['exclude'] = implode( ',', $categories );

	} else {
		$args['exclude'] = implode( ',', $categories );
	}

	return $args;
}

/* Hier wird jetzt der Filter verwendet, um das Kategorien Widget zu überschreiben */
add_filter( 'widget_categories_args', 'exclude_categories', 10, 1 );Code-Sprache: PHP (php)

In unserem Beispiel werden die Kategorien 1, 2, 3, 4 und 5 exkludiert, sofern nicht schon irgendwo Kategorien die exkludiert werden sollen, definiert waren. Du kannst den Array auch mit einem ACF-Feld befüllen, falls du Advanced Custom Fields verwendest. Dann sparst du dir das Getippe, vor allem wenn du das Taxnomy-Feld von ACF verwendest und als Rückgabewert ID wählst.