Nun ist Version 3.1 von WordPress erschienen und die User lernen die Admin Bar kennen. Erste Fragen treten auf und so kam es auch dazu, dass man zum Beitrag, zur Seite oder einem Custom Post Type den Button möchte, der das „löschen“ – Verschieben in den Papierkorb – erleichtert. Ich möchte dies als Beispiel nutzen um aufzuzeigen, wie man sich die Admin Bar im Hinblick auf die Standard-Möglichkeiten an Beitrag oder Seite ermöglicht und damit eine kleine Erweiterung zu dem vorhergehenden Beitrag, der die Admin Bar um eine Suche erweitert, ergänzen.
Die folgende kleine Funktion legt man in ein Plugin oder alternativ in die functions.php
des Themes ab und wenn es sich um eine singulare Sicht handelt, dann erscheint der zusätzliche Button in der Admin Bar. Der Title des Button ist statisch vergeben, da das WP Object dies nicht enthält. Andere Einträge wie „Edit post“ o.ä. sind in dem Array enthalten und können daher genutzt werden; alles zu finden im Array $post_type_object->labels
.
Via add_action
übergebe ich die Funktion an den Hook, der sich um die Auswertung der Inhalt kümmert, dabei vergebe ich den Wert 35 als Priorität, der die Reihenfolge in der Admin Bar definiert. Mittels $current_object
wissen wir, wo in wir un auf der Oberfläche befinden und können so die ID des Posts zuordnen und die Rechte des jeweiligen Users prüfen.
Das eigentliche Löschen des Beitrags, Seite oder Custom Post Types erfolgt dann via Link, der mittels der Funktion get_delete_post_link()
erzeugt wird. In diesem Zusammenhang gibt es weitere Funktionen, die es erleichtern, den Link für eine Aktion zu erzeugen. Alle Infos dazu findet man in wp-includes/link-template.php
.
function fb_add_admin_bar_trash_menu() {
global $wp_admin_bar;
if ( !is_super_admin() || !is_admin_bar_showing() )
return;
$current_object = get_queried_object();
if ( empty($current_object) )
return;
if ( !empty( $current_object->post_type ) &&
( $post_type_object = get_post_type_object( $current_object->post_type ) ) &&
current_user_can( $post_type_object->cap->edit_post, $current_object->ID )
) {
$wp_admin_bar->add_menu(
array( 'id' => 'delete',
'title' => __('Move to Trash'), // alternative for other titles is the $post_type_object->labels
'href' => get_delete_post_link($current_object->term_id)
)
);
}
}
add_action( 'admin_bar_menu', 'fb_add_admin_bar_trash_menu', 35 );
Alternativ können auch Einträge in der Admin Bar entfernt werden, dazu muss in der Funktion die ID des Eintrags mitgegeben werden. Im folgenden Beispiel wird der Eintrags zu der Kommentarsicht entfernt. Die ID kann man auch finden, wenn man sich das Markup in der Ausgabe anschaut, dabei ist am List-Element die Klasse als letzter String damit erweitert; Bsp. zum obigen Eintrag delete: <li class="ab-delete ">
oder eben auch die Kommentare <li class="ab-comments ">
function fb_admin_bar_render() {
global $wp_admin_bar;
$wp_admin_bar->remove_menu('comments');
}
add_action( 'wp_before_admin_bar_render', 'fb_admin_bar_render' );