DONOTCACHEPAGE überschreiben (Caching forcieren)

Inhalt

Einleitung

Die meisten Caching-Plugins für WordPress nutzen einen de facto Standard, um Seiten vom Cache auszuschließen: Die Konstante DONOTCACHEPAGE. Wenn diese während einer Anfrage als true definiert ist, wird WP Rocket die betreffende Seite nicht cachen, sondern eine reguläre Datenbankabfrage von WordPress erlauben.

Allerdings kann es in seltenen Fällen notwendig werden, dieses Verhalten zu überschreiben, und WP Rocket bietet auch dafür eine Möglichkeit. So geht’s:

Wie WP Rocket eine Seite cacht

Das ultimative Ziel eines jeden Caching-Plugins muss darin bestehen zu verhindern, dass WordPress geladen wird; stattdessen muss es dafür sorgen, dass eine angeforderte Seite wann immer möglich als Sammlung statischer Dateien an den Browser ausgeliefert wird.

Das Cachen einer Seite durch WP Rocket lässt sich vereinfacht folgedermaßen beschreiben:

1
Eine der ersten Dateien, die WordPress nach der initialen Anfrage an seine index.php lädt, ist die wp-config.php. WP Rocket hat direkt am Anfang der wp-config.php als Erstes eine Konstante – WP_CACHE – als true definiert: define( 'WP_CACHE', true);
2
Diese weist WordPress an, wp-content/advanced-cache.php zu laden.
3
Aus advanced-cache.php heraus weist WP Rocket WordPress an, wp-rocket/inc/front/process.php zu laden.
4
Innerhalb von process.php lädt WP Rocket wp-content/wp-rocket-config/{site-url.tld}.php, die relevante benutzerdefinierte Konfigurationen enthält.
5
Immer noch aus process.php heraus und nachdem es eine Reihe von Ausnahmen geprüft hat, cacht WP Rocket die Dateien für die angefragte Seite.

Einmal gecacht, wird die Seite bei der nächsten Anfrage direkt aus dem Cache und ohne Datenbank-Anfrage zu WordPress ausgeliefert.

Seiten mittels DONOTCACHEPAGE vom Cache ausschließen

Für bestimmte Seiten-Typen ist es unerlässlich, dass sie nicht gecacht werden. Zum Beispiel in einem E-Commerce-Szenario: Wenn eine Kundin den Bezahlvorgang startet, möchte sie wohl kaum eine gecachte Seite mit den Bezahldaten eines vorherigen Kunden sehen.

Aufwendige Plugins, wie beispielsweise like WooCommerce (and many others), nutzen die Konstante DONOTCACHEPAGE, um Caching-Plugins wissen zu lassen, dass bestimmte Seiten oder Endpoints auf keinen Fall gecacht werden sollen.

Dementsprechend unterstützen alle beliebten Caching-Plugins, inklusive WP Rocket, jene Konstante und cachen keine Anfrage, für die DONOTCACHEPAGE als true definiert ist.

DONOTCACHEPAGE mittels Filter in WP Rocket überschreiben

So praktisch eine allgemein genutzte Konstante wie DONOTCACHEPAGE auch sein mag, gibt es Fälle, in denen ein Site-Admin die Konstante überschreiben muss, um einen bestimmten Typ Anfragen eben doch cachen zu lassen – egal, ob ein Drittanbieter-Plugin mittels der bekannten Methode eine Seite vom Cache ausschließen möchte.

WP Rocket deckt dir in so einem Fall den Rücken. Du brauchst lediglich true als Wert an einen speziellen Filter in WP Rocket zu übergeben, und WP Rocket wird die Konstante DONOTCACHEPAGE einfach ignorieren.

add_filter( 'rocket_override_donotcachepage', '__return_true', PHP_INT_MAX );

Das Code-Snippet kannst du wie folgt in ein eigenes MU-Plugin packen:

Eigenes MU Plugin

Folge den allgemeinen Anweisungen in diesem Artikel:
Eigenes (MU-)Plugin für Anpassungen erstellen

1
Lege einen neuen Ordner mu-plugins innerhalb von wp-content an.
Falls der Ordner mu-plugins dort schon existiert, verwende den existierenden.
2
Lege eine neue Datei an und speichere die folgenden Code-Zeilen darin. Nutze dafür einen Code- oder Texteditor:
<?php
defined( 'ABSPATH' ) or die( 'Cheatin&#8217; uh?' );
/**
 * Plugin Name: WP Rocket | Force Caching
 * Description: Overrides the DONOTCACHEPAGE constant in order to force caching.
 * Author:      WP Rocket Support Team
 * Author URI:  http://wp-rocket.me/
 * License:     GNU General Public License v3 or later
 * License URI: http://www.gnu.org/licenses/gpl-3.0.html
 */

add_filter( 'rocket_override_donotcachepage', '__return_true', PHP_INT_MAX );
	
3
Speichere die Datei unter einem beliebigen Namen, aber nutze ausschließlich lateinische Kleinbuchstaben, Ziffern, oder Bindestriche im Dateinamen. Zum Beispiel:
wp-rocket-force-caching.php
4
Lade die Datei in den Ordner mu-plugins aus Schritt 1 hoch.
5
Zuletzt deaktiviere und re-aktiviere WP Rocket einmal.

Beispiel: Gecachte Mitgliederseiten

Sagen wir beispielhalber, du nutzt ein Membership-Plugin, um spezifischen Inhalt nur eingeloggten Mitgliedern zugänglich zu machen. Du hast die Einstellung Cache für angemeldete Nutzer in WP Rocket aktiviert, damit deinen Mitgliedern schnell ladende, gecachte Seiten angezeigt werden.

Mache Membership-Plugins definieren die Konstante DONOTCACHEPAGE für eingeloggte Benutzer_innen, da es ein verbreitetes Nutzungsszenario wäre, keine statischen, sondern dynamische Inhalte für eingeloggte Benutzer_innen anzuzeigen.
In unserem Beispiel jedoch wäre es aber dein Ziel, statische Inhalte für eingeloggte Mitglieder anzuzeigen, zusätzlich zu den öffentlichen Inhalten, die normale Besucher_innen sehen. In solche einem Fall müsstest du die DONOTCACHEPAGE-Direktive des Membership-Plugins überschreiben, damit die Einstellung Cache für angemeldete Nutzer in WP Rocket für dein Szenario die richtigen Ergebnisse bringen könnte.