In welchem Cookie wird bei WordPress das Passwort für eine bestimmte Seite gespeichert?
WordPress nutzt tatsächlich Cookies, um den Zugriff auf passwortgeschützte Beiträge oder Seiten zu verwalten. Wenn ein Besucher das richtige Passwort eingibt, wird ein Cookie im Browser gesetzt, damit er das Passwort nicht bei jedem Neuladen der Seite erneut eingeben muss.
Hier sind die Details dazu:
Welcher Cookie wird verwendet?
Der Name des Cookies ist standardmäßig wie folgt aufgebaut: wp-postpass_ gefolgt von einem kryptischen Hash (einer langen Kombination aus Buchstaben und Zahlen).
- Beispiel:
wp-postpass_123456789abcdef...
Der Hash-Teil am Ende ist einzigartig für deine WordPress-Installation, damit Cookies von verschiedenen Websites sich nicht gegenseitig beeinflussen.
Was genau wird im Cookie gespeichert?
Entgegen der häufigen Annahme wird nicht das Passwort im Klartext gespeichert. WordPress speichert im Cookie einen sogenannten Hash-Wert, der mit dem Passwort der Seite verknüpft ist. Wenn der Browser die Seite erneut aufruft, sendet er diesen Cookie mit. WordPress prüft dann auf dem Server, ob dieser Hash zum Passwort der Seite passt.
Wie lange ist der Cookie gültig?
Standardmäßig bleibt dieser Cookie 10 Tage lang aktiv. Danach läuft er ab, wird vom Browser gelöscht und der Besucher muss das Passwort erneut eingeben.
Technische Details im Überblick
| Eigenschaft | Details |
|---|---|
| Name | wp-postpass_[Hash] |
| Inhalt | Ein verschlüsselter Hash des Passworts |
| Lebensdauer | 10 Tage (Standard) |
| Sicherheit | Der Cookie wird nur über HTTPS gesendet, wenn deine Seite SSL nutzt. |
Kann man die Dauer ändern?
Falls dir die 10 Tage zu lang oder zu kurz sind, lässt sich das über die functions.php deines Themes (oder ein Plugin) anpassen. Mit folgendem Code-Schnipsel könnte man die Zeit zum Beispiel auf das Ende der aktuellen Sitzung (beim Schließen des Browsers) begrenzen:
PHP Code
add_filter( 'post_password_expires', function() {
return 0; // 0 bedeutet: Läuft am Ende der Sitzung ab
});
Wie stellst du den Ablauf des Cookies z.B. auf 365 Tage?
Um die Gültigkeit des Passwort-Cookies auf 365 Tage zu verlängern, musst du eine kleine Funktion in deine WordPress-Installation einfügen. WordPress berechnet die Zeit in Sekunden.
Die Formel
Da WordPress den Wert in Sekunden erwartet, sieht die Rechnung so aus: 365 Tage×24 Stunden×60 Minuten×60 Sekunden=31.536.000 Sekunden
So gehst du vor
Du hast zwei Möglichkeiten, diesen Code einzubauen:
Methode A: Über die functions.php (Für Fortgeschrittene)
- Logge dich in dein WordPress-Backend ein.
- Gehe zu Design > Theme-Datei-Editor.
- Wähle rechts in der Liste die Datei functions.php aus (am besten nutzt du ein Child-Theme, damit die Änderung bei einem Update nicht verloren geht).
- Füge ganz unten folgenden Code ein:
PHP Code
// Passwort-Cookie Gültigkeit auf 365 Tage setzen
add_filter( 'post_password_expires', function( $time ) {
return time() + 31536000; // 365 Tage in Sekunden
});
Methode B: Über ein Plugin (Sicherer & Einfacher)
Wenn du nicht direkt im Code deines Themes arbeiten möchtest, empfehle ich das Plugin Code Snippets.
- Installiere und aktiviere das Plugin Code Snippets.
- Gehe zu Snippets > Neu hinzufügen.
- Gib dem Snippet einen Namen (z. B. “Passwort-Cookie verlängern”).
- Kopiere den Code von oben hinein und klicke auf “Änderungen speichern und aktivieren”.
Wichtiger Hinweis zur Sicherheit
Bedenke bitte, dass ein Besucher nun ein ganzes Jahr lang Zugriff auf die geschützte Seite hat, ohne das Passwort erneut eingeben zu müssen – sofern er seine Browser-Cookies nicht manuell löscht. Auf öffentlichen Computern (z. B. in einer Bibliothek) könnte dies ein Sicherheitsrisiko darstellen.
Wenn du differenzieren möchtest
Das ist ein sehr kluger Ansatz. Eine pauschale Verlängerung auf ein Jahr ist für manche Inhalte super (z. B. ein Kundenbereich), für andere (sensible Daten) aber vielleicht zu unsicher.
Um zu differenzieren, nutzen wir innerhalb der Funktion sogenannte Conditional Tags. Du kannst die Dauer basierend auf der Kategorie, der ID des Beitrags oder sogar dem Seitentyp festlegen.
Hier sind die gängigsten Szenarien für deinen Code:
1. Differenzierung nach Beitrags-ID
Wenn du nur für eine ganz bestimmte Seite (z. B. mit der ID 123) die 365 Tage gewähren willst und für alle anderen den Standard behalten möchtest:
PHP Code
add_filter( 'post_password_expires', function( $time ) {
// Prüfen, ob wir uns auf der Seite mit der ID 123 befinden
if ( get_the_ID() === 123 ) {
return time() + 31536000; // 365 Tage
}
return $time; // Ansonsten Standard-Dauer (10 Tage)
});
2. Differenzierung nach Kategorie
Das ist besonders praktisch, wenn du z. B. eine Kategorie „Premium“ hast, die ein Jahr lang offen bleiben soll, während „Interne News“ schneller ablaufen:
PHP Code
add_filter( 'post_password_expires', function( $time ) {
// Wenn der Beitrag zur Kategorie 'premium' gehört
if ( has_category( 'premium' ) ) {
return time() + 31536000; // 365 Tage
}
return $time; // Ansonsten Standard
});
3. Mehrere Bedingungen (Kombiniert)
Du kannst auch eine Liste von IDs definieren, die die lange Laufzeit erhalten sollen:
PHP Code
add_filter( 'post_password_expires', function( $time ) {
$long_access_ids = [10, 45, 92]; // Hier die IDs deiner Seiten eintragen
if ( in_array( get_the_ID(), $long_access_ids ) ) {
return time() + 31536000; // 365 Tage
}
// Für alles andere: nur 1 Tag (Beispiel für eine Verkürzung)
return time() + 86400;
});
Woher bekommst du die ID?
Falls du dir unsicher bist: Du findest die ID einer Seite oder eines Beitrags ganz einfach, indem du ihn im WordPress-Backend zum Bearbeiten öffnest. In der Adresszeile deines Browsers steht dann etwas wie post=123. Die Zahl hinter dem Gleichheitszeichen ist deine ID.
Ein kleiner Fallstrick
WordPress prüft die Cookie-Dauer in dem Moment, in dem das Passwort eingegeben wird.
- Wenn du den Code änderst, gilt das nur für Personen, die das Passwort ab jetzt neu eingeben.
- Nutzer, die bereits eingeloggt sind, behalten ihre alte Ablaufzeit, bis sie sich neu anmelden müssen oder den Cookie löschen.
Eine Differenzierung nach zwei Kategorien oder einem Schlagwort und einer Kategorie, so das sich zwei abweichende Zeiten für den Ablauf das Passwort ergeben.
Das lässt sich hervorragend über eine if-elseif-Struktur lösen. So kannst du präzise steuern, welche Gruppe (Kategorie oder Schlagwort) welche „Haltbarkeit“ für den Zugriff erhält.
Hier ist das passende Code-Snippet, das genau diese zwei abweichenden Zeiten definiert:
PHP Code
add_filter( 'post_password_expires', function( $time ) {
// FALL 1: 365 Tage für eine bestimmte Kategorie (z.B. 'archiv')
if ( has_category( 'archiv' ) ) {
return time() + 31536000; // 365 Tage
}
// FALL 2: 30 Tage für ein bestimmtes Schlagwort (z.B. 'projekt-x')
elseif ( has_tag( 'projekt-x' ) ) {
return time() + 2592000; // 30 Tage
}
// STANDARD: 10 Tage für alles andere
return $time;
});
So passt du den Code an deine Bedürfnisse an
- Kategorien (
has_category): Du kannst hier entweder den Namen (‘archiv’), den Slug (‘archiv-bereich’) oder die ID (z.B. 5) der Kategorie eintragen. - Schlagworte (
has_tag): Auch hier funktioniert der Name, der Slug oder die ID des Schlagworts (Tags). - Reihenfolge beachten: Der Code wird von oben nach unten abgearbeitet. Wenn ein Beitrag sowohl in der Kategorie “Archiv” ist als auch das Schlagwort “Projekt-X” hat, gewinnt in diesem Beispiel die Kategorie (365 Tage), weil sie zuerst geprüft wird.
Profi-Tipp: Mehrere Kategorien gleichzeitig
Falls du mehrere Kategorien hast, die alle die gleiche lange Laufzeit bekommen sollen, kannst du ein Array verwenden:
PHP Code
if ( has_category( array( 'kunden', 'partner', 'intern' ) ) ) {
return time() + 31536000; // 365 Tage
}
Kurze Checkliste vor der Aktivierung
- Slugs prüfen: Vergewissere dich unter Beiträge > Kategorien, dass du den korrekten “Slug” (die URL-freundliche Variante des Namens) im Code verwendest.
- Child-Theme oder Plugin: Wie erwähnt, ist die Nutzung des Plugins Code Snippets am sichersten, da ein Fehler im Code dort nicht deine ganze Seite per White-Screen-of-Death lahmlegt, sondern einfach nur das Snippet deaktiviert.
Wie heißen die Kategorien oder Schlagworte, die du verwenden möchtest? Ich kann dir das Snippet auch direkt mit deinen Begriffen fertig schreiben.
Welche Laufzeit hat das Passwort, wenn der Beitrag z.B. in mehreren Kategorien ist und bei der einen Kategorie eine Laufzeit von 365 Tagen hat und bei der anderen eine Standard-Laufzeit von 10 Tagen?
In diesem Fall gewinnt immer die Bedingung, die im Code zuerst abgefragt wird.
WordPress arbeitet das Code-Snippet von oben nach unten ab. Sobald eine Bedingung (if) zutrifft, gibt die Funktion den entsprechenden Wert zurück und bricht die weitere Prüfung ab.
Ein konkretes Beispiel zur Verdeutlichung:
Stell dir vor, dein Beitrag ist in den Kategorien „Premium“ (soll 365 Tage haben) und „News“ (soll Standard 10 Tage haben).
PHP Code
add_filter( 'post_password_expires', function( $time ) {
// 1. Prüfung: Ist der Beitrag in 'premium'?
if ( has_category( 'premium' ) ) {
return time() + 31536000; // Wenn JA, wird hier abgebrochen und 365 Tage gesetzt.
}
// 2. Prüfung: (Wird nur erreicht, wenn 1. Prüfung NEIN war)
elseif ( has_category( 'news' ) ) {
return time() + 864000; // 10 Tage
}
return $time;
});
Das Ergebnis:
- Da der Beitrag in „Premium“ ist, wird die erste Bedingung sofort wahr.
- Die restlichen
elseif-Anweisungen werden ignoriert. - Der Nutzer erhält also den Zugriff für 365 Tage.
Was passiert, wenn du keine Differenzierung für „Standard“ eingebaut hast?
Wenn du im Code nur die Kategorie „Premium“ auf 365 Tage setzt und der Beitrag zusätzlich in „News“ ist, passiert Folgendes:
- WordPress prüft: „Ist er in Premium?“ -> Ja.
- Das Ergebnis „365 Tage“ wird geliefert.
- Dass der Beitrag auch in „News“ ist, spielt für WordPress keine Rolle mehr, da die Bedingung für die längere Laufzeit bereits erfüllt wurde.
Die goldene Regel für deinen Code:
Setze die speziellsten oder längsten Laufzeiten immer nach oben in den if-Block. Die allgemeineren Kategorien oder der Standard-Rückgabewert (return $time) kommen immer ans Ende.
Zusammengefasst: Es gibt keinen „Durchschnittswert“ oder Konflikt – die erste zutreffende Zeile im Code bestimmt das Ablaufdatum des Cookies.

