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