wake-up-neo.net

Ich bleibe bei der benutzerdefinierten WordPress Multisite-Anmeldeseite ohne .htaccess-Änderung

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.

Schritt 1:

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>

Schritt 2:

@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.

Schritt 3:

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.

Schritt 4 (Einrichtungsschritte):

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?

In Bengali

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.

1
Mayeenul Islam

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.

1
majick