Kategorien beim WordPress Beitrag verfassen rechte-abhängig filtern

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 13 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

Die Ausgabe der Kategorien kann sehr unübersichtlich werden und ab und an sind auch Kategorien für bestimmte Zwecke angelegt, aber nicht dem Schreiben von Beiträgen zu bestimmten Kategorien. Daher kann es sinnvoll sein, wenn man Kategorien in der Metabox beim Schreiben eines Beitrags filtert. WordPress bietet dazu einen Filter und anhand zweier Beispiele zeige ich kurz das Vorgehen.

Im ersten Fall werden zwei Kategorien gefiltert. Es gibt lediglich eine Einschränkung: der Filter ist nicht (!) aktiv, wenn der eingeloggte User das Berechtigungsobjekt manage_categories hat; im Standard sind das die Rollen Administrator & Editor, siehe Übersicht der Objekte im Codex. Der Filter ist im Grunde so aufgesetzt, dass man das SQL-Statement erweitert und in die Klammer gehören die Titelform (slug) der Kategorien.

Es ist zu bedenken, dass diese kleine Funktion damit im Frontend und Backend zieht und die Kategorien werden überall gefiltert, daher im zweiten Beispiel eine erweitere Lösung.


function fb_list_terms_exclusions($args) {
	
	$where = '';
	
	if ( !current_user_can('manage_categories') )
		$where = " AND t.slug  NOT IN ('uncategorized', 'category-2')"; // slug of categories
	
	return $where; 
}
add_filter( 'list_terms_exclusions', 'fb_list_terms_exclusions' );

Im zweiten Beispiel werden die Abfragen erweitert, so dass wir eine Filterung getrennt in Frontend und Backend haben. natürlich ist auch nur dies ein Beispiel und kann auf verschiedene Anforderungen hin erweitert werden.
Im Beispiel habe ich die beiden Variablen $pagenow und $post_type global gesetzt. Diese Variablen sagen uns, wo und was im Backend gerade aktiv ist. In dem kleinen Beispiel wird der Filter im Backend (is_admin()) nur angewandt, wenn der Post Type post ist (==). Ebenfalls könnte man via $pagenow auf die Seite prüfen, zum Beispiel post.php.
Das Frontend wird im ersten Schritt angesprochen, immer wenn man nicht im Admin ( !is_admin() ) ist, werden die beiden Kategorien gefiltert.


function fb_list_terms_exclusions($args) {
	global $pagenow, $post_type;
	
	$where = '';
	
	// filter only for frontend
	if ( !is_admin() ) {
		$where = " AND t.slug  NOT IN ('uncategorized', 'category-2')"; // slug of categories
	}
	
	// backend, only on post-type post
	if (
		'post' == $post_type && 
		is_admin() && 
		!current_user_can('manage_categories') 
	) {
		$where = " AND t.slug  NOT IN ('slider')"; // slug of category
	}
	
	return $where;
}
add_filter( 'list_terms_exclusions', 'fb_list_terms_exclusions' );

Viel Potential für Anpassungen; aber auch ein Schritt um das Backend an die Bedürfnisse der Autoren anzupassen. Viel Spaß beim Nutzen und Erweitern.

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.