WP Rocket: „Cache leeren“ in der Admin-Leiste

WP Rocket zeigt die Funktion zum Leeren des Caches nicht für alle Benutzerrollen in der WordPress-Admin-Leiste an.

Das folgende Snippet ergänzt deshalb einen eigenen Button „🚀 Cache leeren“ in der Admin-Leiste. Der Button steht allen eingeloggten Benutzern zur Verfügung, die Seiten bearbeiten dürfen.

Damit können zum Beispiel Redakteure den WP-Rocket-Cache selbst leeren, ohne Zugriff auf die WP-Rocket-Einstellungen oder andere administrative Bereiche zu benötigen.

Was macht das Snippet?

  • Fügt den Button „🚀 Cache leeren“ zur WordPress-Admin-Leiste hinzu.
  • Der Button erscheint nur für Benutzer mit der Berechtigung edit_pages.
  • Der Button wird nur angezeigt, wenn WP Rocket aktiv und verfügbar ist.
  • Der eigene Cache-Button wird ganz ans Ende des linken Bereichs der Admin-Leiste gesetzt.
  • Ein Klick leert den kompletten WP-Rocket-Cache der Website.
  • Anschließend wird der Benutzer automatisch auf die zuvor aufgerufene Seite zurückgeleitet.
  • Der Aufruf ist über einen WordPress-Nonce gegen unberechtigte Requests abgesichert.

Snippet

<?php

/**
 * WP Rocket – "Cache leeren" in der Admin-Leiste
 */

add_action( 'admin_bar_menu', function( $wp_admin_bar ) {

    // Nur für eingeloggte Benutzer mit Bearbeitungsrechten
    if ( ! current_user_can( 'edit_pages' ) ) {
        return;
    }

    // Nur wenn WP Rocket verfügbar ist
    if ( ! function_exists( 'rocket_clean_domain' ) ) {
        return;
    }

    $url = wp_nonce_url(
        admin_url( 'admin-post.php?action=i2_clear_rocket_cache' ),
        'i2_clear_rocket_cache'
    );

    $wp_admin_bar->add_node( [
        'id'    => 'i2-clear-rocket-cache',
        'title' => '🚀 Cache leeren',
        'href'  => $url,
        'meta'  => [
            'title' => 'WP-Rocket-Cache leeren',
        ],
    ] );

}, 9999 );


/**
 * Eigenen Cache-Button ganz ans Ende der linken Adminbar setzen
 */
add_action( 'wp_before_admin_bar_render', function() {

    global $wp_admin_bar;

    $node = $wp_admin_bar->get_node( 'i2-clear-rocket-cache' );

    if ( ! $node ) {
        return;
    }

    // Erst entfernen ...
    $wp_admin_bar->remove_node( 'i2-clear-rocket-cache' );

    // ... und als letzten Node wieder hinzufügen
    $wp_admin_bar->add_node( [
        'id'     => $node->id,
        'title'  => $node->title,
        'href'   => $node->href,
        'parent' => $node->parent,
        'group'  => $node->group,
        'meta'   => $node->meta,
    ] );

}, 9999 );


/**
 * Cache tatsächlich leeren
 */
add_action( 'admin_post_i2_clear_rocket_cache', function() {

    if (
        ! current_user_can( 'edit_pages' ) ||
        ! check_admin_referer( 'i2_clear_rocket_cache' )
    ) {
        wp_die( 'Keine Berechtigung.' );
    }

    if ( function_exists( 'rocket_clean_domain' ) ) {
        rocket_clean_domain();
    }

    // Zur vorherigen Seite zurück
    $redirect = wp_get_referer();

    if ( ! $redirect ) {
        $redirect = admin_url();
    }

    wp_safe_redirect( $redirect );
    exit;
} );

Berechtigungen

Als Berechtigungsprüfung verwendet das Snippet:

current_user_can( 'edit_pages' )

Damit ist die Funktion nicht auf Administratoren beschränkt. Auch andere Rollen können den Cache leeren, sofern sie Seiten bearbeiten dürfen.

Die Berechtigung wird dabei zweimal geprüft: einmal bei der Anzeige des Buttons und erneut beim eigentlichen Aufruf der Cache-Funktion. Ein Benutzer kann die Aktion daher nicht einfach durch direkten Aufruf der URL ausführen, wenn ihm die erforderlichen Rechte fehlen.

Sicherheit

Der Link zum Leeren des Caches wird mit wp_nonce_url() erzeugt. Beim Ausführen prüft check_admin_referer() den Nonce erneut.

Damit ist die Cache-Aktion sowohl durch die Benutzerberechtigung als auch durch einen WordPress-Nonce geschützt.

Voraussetzung

Das Snippet funktioniert nur mit WP Rocket. Es prüft dafür, ob die WP-Rocket-Funktion rocket_clean_domain() vorhanden ist.

Ist WP Rocket nicht aktiv, wird der Button gar nicht erst angezeigt.

Einsatz

Das Snippet eignet sich besonders für Websites, auf denen Redakteure oder andere eingeschränkte Benutzer Inhalte selbst bearbeiten, aber keinen Zugriff auf Plugins und deren Einstellungen erhalten sollen.

Nach Änderungen können sie den Cache direkt über die Admin-Leiste leeren, ohne zusätzliche Rechte für WP Rocket oder den WordPress-Administrationsbereich zu benötigen.