Ja, ich will keine benutzerdefinierte Anmeldeseite für WordPress Multisite erstellen .
Es ist eine gut überarbeitete Frage, und viele von uns suchen nach der Antwort. Vielleicht hat jemand eine, aber ich kann keine solide, ganzheitliche Lösung für dieses Problem finden. Ich versuche einen nicht .htaccess
Weg zu finden - einen PHP 'oder einen WordPress' Weg.
Ich habe den naheliegendsten Artikel dieser Suche studiert:
Okay, jetzt habe ich den gesamten Code von /wp-signup.php
in eine Datei in meinem Design mit dem Namen signup.php
kopiert, eine Seitenvorlage erstellt und die Seite mit der URL http://example.com/signup
aufgerufen.
Ich habe Änderungen an den erforderlichen Stellen vorgenommen. Anstelle von get_header( 'wp-signup' );
habe ich ein benutzerdefiniertes Element aus meinem Thema get_header('null');
verwendet. Dieser (header-null.php
) ist in Bezug auf Design und Architektur ziemlich einfach aus der header.php
-Standarddatei meines Themas.
Ach! Es gibt keinen
header-wp-signup.php
in WordPress
Ebenso habe ich get_footer( 'wp-signup' );
ersetzt durch:
?> <!-- /ending of php tag -->
</div> <!-- /.container .site-area .not-logged-in-page -->
<?php wp_footer(); ?>
</body>
</html>
@toscho hat mir geholfen, zwei Probleme beim Abrufen bereits geladener Dateien zu lösen. Anstatt also absolute Pfade anzuzeigen, habe ich die Zeilen einfach auskommentiert:
//require( dirname(__FILE__) . '/wp-load.php' );
und
//require( dirname( __FILE__ ) . '/wp-blog-header.php' );
Jetzt habe ich eine nette, funktionierende Datei für die neu geänderte Anmeldeseite. Ich muss den Datenverkehr von /wp-signup.php
nach hier leiten, ohne .htaccess
zu verwenden.
Ich fand diesen WordPress.org-Support-Thread sehr hilfreich:
Jetzt habe ich ein "mu-plugin" erstellt, das eine Datei erstellt in: wp-content/mu-plugins/sign-up-location.php
. Dort habe ich zwei Funktionen verwendet:
/**
* Changing the Registration page URL.
*
* @return string The URL of the new page.
* --------------------------------------------------------------------------
*/
function project_signup_page() {
$page = network_site_url() .'signup/';
return $page;
}
add_filter( 'wp_signup_location', 'project_signup_page' );
/**
* Redirect from default signup page to custom page.
*
* @return void
* --------------------------------------------------------------------------
*/
function project_redirect_from_default_signup() {
if( strpos($_SERVER['REQUEST_URI'], 'wp-signup.php')) {
wp_redirect(network_site_url() .'signup/');
exit();
}
}
add_action( 'plugins_loaded', 'project_redirect_from_default_signup' );
Der erste ist das Ändern der Registrierungs-URL in meinen benutzerdefinierten Pfad. Und der zweite ist mein Wunsch, der den Verkehr von /wp-signup.php
nach /signup
ohne .htaccess
treibt.
Hinweis: Anstatt das MU-Plugin zu erstellen, können Sie jetzt mit einem normalen Plugin den gleichen Effekt erzielen.
Gemäß @ toschos Vorschlag habe ich die Seitenvorlage durch einen Rewrite Endpoint
ersetzt:
<?php
/**
* Rewrite endpoint : /register.
*
* @return void
* --------------------------------------------------------------------------
*/
function project_registration_endpoint() {
add_rewrite_endpoint( 'register', EP_ROOT );
if( get_option("EDIT_REWRITE_RULE") != 1 ) {
flush_rewrite_rules();
update_option( "EDIT_REWRITE_RULE", 1 );
}
}
add_action( 'init', 'project_registration_endpoint' );
/**
* Custom Template for Registration.
*
* @param string $template Template to be loaded.
* @return string Our custom template to show up.
* --------------------------------------------------------------------------
*/
function project_custom_templates( $template ) {
if( ! is_admin() ) {
if( get_query_var('register') || strpos($_SERVER['REQUEST_URI'], 'wp-signup.php') ) {
$template = get_template_directory() .'/signup.php';
}
}
return $template;
}
add_filter( 'template_include', 'project_custom_templates' );
/**
* Return a value for '/register'
* Make sure that 'get_query_var( 'register' )' will not return just an empty string if it is set.
*
* @link http://wordpress.stackexchange.com/a/51450/22728
* @link https://www.pmg.com/blog/a-mostly-complete-guide-to-the-wordpress-rewrite-api/
*
* @param array $vars Query variables.
* @return array Modified query variables.
* --------------------------------------------------------------------------
*/
function project_set_epex_var( $vars ) {
isset( $vars['register'] ) and $vars['register'] = true;
return $vars;
}
add_filter( 'request', 'project_set_epex_var' );
Geändert: Und zu diesem Zeitpunkt habe ich den Slug /signup
in /register
geändert, um mögliche Konflikte zu lösen, die auftreten können. Ich habe die Saiten des mu-plugins entsprechend geändert. Und die Seitenvorlage zurückziehen.
Alles funktioniert gut und ich habe mein gewünschtes Ding bekommen :) ... außer ...
die Erfolgs- oder Fehlermeldungen ...
Alle Erfolgs- oder Fehlermeldungen sind weg mit wp_redirect()
. :O
Ich habe meine Datei überprüft, ja, die show_user_form()
gibt es mit dem $errors
-Parameter. Alles ist in Ordnung, mit Ausnahme der Fehler- oder Erfolgsmeldungen.
Wie kann ich die Erfolgs- und/oder Fehlermeldungen auf meiner Registrierungsseite für benutzerdefinierte Seiten anzeigen?
Ich habe das Ganze in allen Quellen auf Bengalisch ausführlich erklärt, in meinem Blog-Post - Ich fürchte, eine automatische Übersetzung auf Bengalisch ist bis jetzt noch nicht so gut.
Versuchen Sie in Ihrer signup.php
-Datei, das Formular action
von wp-signup.php
in signup.php
zu ändern. Auf diese Weise werden die Formulardaten nicht über die Umleitung, sondern direkt zurück in dieselbe Datei geleitet. Auf diese Weise sollte der $errors
aus der Formularversendung erhalten bleiben.