Trick # 592 | Dieser Beitrag beinhaltet 981 Wörter. – Geschätzte Lesezeit: ca. 5 Minuten.
Bei der Arbeit mit WordPress ist der schwarze Admin-Balken ganz oben in der Ansicht allgegenwärtig. Er hält auch einige hilfreiche Funktionen bereit – aber etwas vermissen wir: Die Möglichkeit, einen Beitrag vom Status «Entwurf» auf den Status «Veröffentlicht» zu wechseln. Also haben wir das mal programmiert. Heute zeigen wir Ihnen den Code, den Sie dazu benötigen.
Die WordPress-Admin-Leiste ist ein praktisches Tool, das viele Funktionen schnell erreichbar macht. Indem Sie den Beitragsstatus dort hinzufügen, sparen Sie sich den Umweg über das Backend und können den Status eines Beitrags auf einen Blick sehen und sogar direkt ändern – egal ob Entwurf, veröffentlicht oder geplant. Da lässt sich viel Zeit und Klicks sparen.
Hier ist der Code, den Sie in die functions.php Ihres Themes einfügen können. Die Datei liegt im Backend unter Design/Theme-Datei-Editor:
// Beitragstatus in der Admin-Leiste anzeigen und ändern
function custom_post_status_in_admin_bar($wp_admin_bar) {
if (!is_admin() && is_single()) { // Nur im Frontend und bei Einzelbeiträgen
global $post;// Hole den aktuellen Status des Beitrags
$status = get_post_status($post->ID);
$status_labels = array(
'publish' => 'Veröffentlicht',
'draft' => 'Entwurf',
'future' => 'Geplant',
'pending' => 'Ausstehende Überprüfung',
);$status_styles = array(
'publish' => 'background-color: #008000; color: #ffffff; padding: 3px 5px;',
'draft' => 'background-color: #FF0000; color: #ffffff; padding: 3px 5px;',
'future' => 'background-color: #FFA500; color: #000000; padding: 3px 5px;',
'pending' => 'background-color: #293280; color: #ffffff; padding: 3px 5px;',
);$current_status_label = isset($status_labels[$status]) ? $status_labels[$status] : ucfirst($status);
$current_status_style = isset($status_styles[$status]) ? $status_styles[$status] : '';// Status in der Admin-Bar anzeigen
$wp_admin_bar->add_node(array(
'id' => 'post_status',
'title' => '<span style="' . $current_status_style . '">Status: ' . $current_status_label . '</span>',
));// Status-Änderungen als Untermenü hinzufügen
if ($status !== 'publish' && $status !== 'future') {
$link_style = isset($status_styles['publish']) ? 'color: ' . str_replace(['background-color: ', ';'], '', $status_styles['publish']) . ';' : '';$wp_admin_bar->add_node(array(
'id' => 'change_status_publish',
'parent' => 'post_status',
'title' => '<span style="' . $link_style . '">Zu «Veröffentlicht/Geplant» ändern</span>',
'href' => wp_nonce_url(
add_query_arg(
array(
'action' => 'change_post_status',
'post_id' => $post->ID,
'new_status' => 'publish',
),
admin_url('admin-post.php')
),
'change_post_status'
),
));
}if ($status !== 'draft') {
$link_style = isset($status_styles['draft']) ? 'bold; color: ' . str_replace(['background-color: ', ';'], '', $status_styles['draft']) . ';' : '';$wp_admin_bar->add_node(array(
'id' => 'change_status_draft',
'parent' => 'post_status',
'title' => '<span style="' . $link_style . '">Zu «Entwurf» ändern</span>',
'href' => wp_nonce_url(
add_query_arg(
array(
'action' => 'change_post_status',
'post_id' => $post->ID,
'new_status' => 'draft',
),
admin_url('admin-post.php')
),
'change_post_status'
),
));
}if ($status !== 'pending') {
$link_style = isset($status_styles['pending']) ? 'color: ' . str_replace(['background-color: ', ';'], '', $status_styles['pending']) . ';' : '';$wp_admin_bar->add_node(array(
'id' => 'change_status_pending',
'parent' => 'post_status',
'title' => '<span style="' . $link_style . '">Zu «Ausstehende Überprüfung» ändern</span>',
'href' => wp_nonce_url(
add_query_arg(
array(
'action' => 'change_post_status',
'post_id' => $post->ID,
'new_status' => 'pending',
),
admin_url('admin-post.php')
),
'change_post_status'
),
));
}
}
}
add_action('admin_bar_menu', 'custom_post_status_in_admin_bar', 100);// Status ändern
function handle_change_post_status() {
if (isset($_GET['action']) && $_GET['action'] === 'change_post_status' && isset($_GET['post_id'], $_GET['new_status'])) {
if (!current_user_can('edit_post', $_GET['post_id'])) {
wp_die('Unzureichende Berechtigungen.');
}check_admin_referer('change_post_status');$post_id = (int) $_GET['post_id'];
$new_status = sanitize_key($_GET['new_status']);// Aktualisiere den Status
$post_data = array(
'ID' => $post_id,
'post_status' => $new_status,
);
wp_update_post($post_data);// Leite zurück
wp_redirect(get_permalink($post_id));
exit;
}
}
add_action('admin_post_change_post_status', 'handle_change_post_status');Nach der Integration dieses Codes wird der Status des gerade bearbeiteten Beitrags neu in der schwarzen Admin-Leiste am oberen Rand angezeigt: z. B. «Entwurf», «Veröffentlicht» oder «Geplant»). Zudem können Sie den Status direkt in der Admin-Leiste ändern, ohne ins Backend wechseln zu müssen.
Die Farben und Stylings der jeweiligen Label können Sie mittels CSS auf den Zeilen 16 bis 19 anpassen.
Diese Funktion ist ein einfaches, aber effektives Upgrade für Ihren Workflow. Sie spart Zeit, erleichtert die Beitragsverwaltung und sorgt dafür, dass Sie jederzeit die Kontrolle über den Status Ihrer Inhalte haben.
Werbung


