web-dev-qa-db-fra.com

Coincé avec WordPress Multisite Page d'inscription personnalisée sans modification .htaccess

Oui, bloqué par la création d'une page d'inscription personnalisée pour WordPress Multisite .

C'est une question bien révisée, et beaucoup d'entre nous cherchent la réponse. Peut-être que quelqu'un en a un, mais je ne trouve toujours pas de solution solide et holistique à ce problème. J'essaie de trouver un moyen non .htaccess - un moyen PHP 'ou WordPress'.

Étape 1:

J'ai étudié l'article le plus évident de cette quête:

Bon, maintenant j'ai copié tout le code de /wp-signup.php dans un fichier de mon thème nommé signup.php, en faire un modèle de page et appelé la page avec l'URL http://example.com/signup.

J'ai apporté des modifications aux endroits requis. Comme à la place de get_header( 'wp-signup' );, j’ai utilisé celui de mon thème get_header('null');. Celui-ci (header-null.php) est assez nu dans la conception et l'architecture du fichier par défaut header.php de mon thème.

Hélas! Il n'y a pas de header-wp-signup.php dans n'importe où dans WordPress

De même, j'ai remplacé get_footer( 'wp-signup' ); par:

    ?> <!-- /ending of php tag -->
    </div> <!-- /.container .site-area .not-logged-in-page -->

<?php wp_footer(); ?>

</body>
</html>

Étape 2:

@toscho m'a aidé à résoudre deux problèmes de rappel de fichiers déjà chargés. Ainsi, au lieu d’indiquer des chemins absolus, j’ai simplement commenté les lignes:

//require( dirname(__FILE__) . '/wp-load.php' );

et

//require( dirname( __FILE__ ) . '/wp-blog-header.php' );

Maintenant, j'ai un joli fichier de travail pour la page d'inscription nouvellement modifiée. Je dois conduire le trafic de /wp-signup.php à ici, sans utiliser .htaccess.

Étape 3:

J'ai trouvé ce fil d'assistance de WordPress.org très utile:

Maintenant, j'ai créé un "mu-plugin" créant un fichier dans: wp-content/mu-plugins/sign-up-location.php. Là j'ai utilisé deux fonctions:

/**
 * 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' );

La première consiste à changer l'URL d'inscription en mon chemin personnalisé. Et le second est celui que je souhaite, conduisant le trafic de /wp-signup.php à /signup sans .htaccess.

Remarque: Au lieu de créer MU Plugin, vous pouvez obtenir le même effet en utilisant un plugin standard maintenant.

Étape 4 (étapes de la fourniture):

Selon la suggestion de @ toscho, j'ai remplacé l'élément de modèle de page par un Rewrite Endpoint:

<?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' );

Modifié: Et à ce moment-là, j'ai changé le slug /signup en /register pour résoudre tout conflit éventuel, cela peut arriver. J'ai changé les chaînes du plugin mu en conséquence. Et rendre le modèle de page retiré.

Tout fonctionne bien , et j'ai ce que je voulais :) ... sauf ...

les messages de succès ou d'erreur ...
tous les messages de réussite ou d'erreur ont disparu avec wp_redirect(). : o

J'ai vérifié mon fichier, oui, le show_user_form() est là avec le paramètre $errors, tout va bien, à l'exception des messages d'erreur ou de succès.

Comment puis-je afficher les messages de réussite et/ou d'erreur dans ma page d'inscription de page personnalisée?

En bengali

J'ai expliqué le tout en détail avec toutes les sources en bengali, dans mon article de blog - J'ai bien peur que la traduction automatique en bengali soit jusqu'à ce que bien.

1
Mayeenul Islam

Dans votre fichier signup.php, essayez de changer le formulaire action de wp-signup.php en signup.php... afin que les données du formulaire ne soient pas transmises via la redirection, mais directement dans le même fichier, ce qui devrait conserver le $errors de la publication du formulaire.

1
majick