Kann ich passwortgeschützte Password / Post-functionen außerhalb von wp-login.php verwenden?

Ich habe mehrere (Client-) Sites, die Sicherheits-Plugins verwenden, die den Standardzugriff von wp-login.php auf etwas anderes umschreiben, wp-login.php /myprivatelogin . (Und ja, ich kenne die Themen “Dunkelheit ist keine Sicherheit”, aber das ist keine Sicherheitsfrage).

Das Problem ist, dass diese Änderung der Login-URL die functionalität des Passwortschutzes für Seiten und Posts wp-login.php , da WP das Passwort-Formular auf einer Password-Seite an wp-login.php , um das Passwort zu verifizieren, bevor es zurück zur Seite / Post geleitet wird. und wenn wp-login.php nicht existiert, bricht es ab. Die Sicherheits-Plugins berücksichtigen keine Weiterleitungen zu wp-login.php nur für passwortgeschützte Seiten / Posts; Alle URLs werden an myprivatelogin umgeleitet. Die Plugin-Entwickler scheinen nicht an passwortgeschützten Seiten / Posts interessiert zu sein.

Was ich versuche zu tun, ist ziemlich hacky, aber ich denke, es gibt einen Weg, um dies zum Laufen zu bringen. Ich möchte das Einreichungsformular auf passwortgeschützten Seiten auf eine Kopie des entsprechenden Codes aus wp-login.php in meiner eigenen Datei im Themenverzeichnis redirect, dort das Passwort verifizieren lassen und dann wieder auf die Seite / Post redirect.

Die Datei wp-login.php behandelt alle wp-login.php und speziell für passwortgeschützte Seiten / Posts verwendet die Datei wp-includes/class-phpass.php , um das Passwort zu entschlüsseln und zu überprüfen, bevor es zurück zur Seite / Post geleitet wird. Siehe https://github.com/WordPress/WordPress/blob/master/wp-login.php

Ich habe die ersten paar Schritte funktioniert: Ich bestimmt, ob eine Seite / Post ein Passwort gesetzt hat, indem Sie post_password auf single.php und page.php überprüfen, und wenn ja, ich laden eine jQuery-function, die die “post” URL des Formulars umschreibt zu meiner neuen login.php-Datei im Theme-Verzeichnis, dh

 

Das Formular wird an login.php , aber dort brechen die Dinge ab. Ich bekomme einen weißen Bildschirm und es werden keine Fehler im debug protokolliert. Die URL bleibt unter http://example.com/wp-content/themes/twentyfifteen/login.php ohne Weiterleitung zurück zur Seite / Post.

Ich nehme an, dass die Fehler mit den functionen wp_safe_redirect und wp_get_referer zu tun wp_get_referer . Ist dies ein Problem mit “Headern bereits gesendet”? Oder das Fehlen einer enthaltenen core-WP-Datei?

Dies ist meine login.php und wo das Passwort-Formular bei login.php :

 require_once('http://example.com/wp-includes/class-phpass.php'); if ( array_key_exists( 'post_password', $_POST ) ) { wp_safe_redirect( wp_get_referer() ); } $hasher = new PasswordHash( 8, true ); /** * Filters the life span of the post password cookie. * */ $expire = apply_filters( 'post_password_expires', time() + 1 * DAY_IN_SECONDS ); $referer = wp_get_referer(); if ( $referer ) { $secure = ( 'https' === parse_url( $referer, PHP_URL_SCHEME ) ); } else { $secure = false; } setcookie( 'wp-postpass_' . COOKIEHASH, $hasher->HashPassword( wp_unslash( $_POST['post_password'] ) ), $expire, COOKIEPATH, COOKIE_DOMAIN, $secure ); wp_safe_redirect( wp_get_referer() ); 

Solutions Collecting From Web of "Kann ich passwortgeschützte Password / Post-functionen außerhalb von wp-login.php verwenden?"