2013-10-25 00:58:23 +02:00
< ? php
/** Sets up the WordPress Environment. */
2017-12-01 00:11:00 +01:00
require ( dirname ( __FILE__ ) . '/wp-load.php' );
2013-10-25 00:58:23 +02:00
add_action ( 'wp_head' , 'wp_no_robots' );
require ( dirname ( __FILE__ ) . '/wp-blog-header.php' );
2018-04-30 01:05:21 +02:00
nocache_headers ();
2017-12-01 00:11:00 +01:00
if ( is_array ( get_site_option ( 'illegal_names' ) ) && isset ( $_GET [ 'new' ] ) && in_array ( $_GET [ 'new' ], get_site_option ( 'illegal_names' ) ) ) {
2013-10-25 00:58:23 +02:00
wp_redirect ( network_home_url () );
die ();
}
/**
* Prints signup_header via wp_head
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*/
function do_signup_header () {
/**
2014-11-24 07:31:21 +01:00
* Fires within the head section of the site sign - up screen .
2013-10-25 00:58:23 +02:00
*
* @ since 3.0 . 0
*/
do_action ( 'signup_header' );
}
add_action ( 'wp_head' , 'do_signup_header' );
2017-12-01 00:11:00 +01:00
if ( ! is_multisite () ) {
2015-09-15 19:11:35 +02:00
wp_redirect ( wp_registration_url () );
2013-10-25 00:58:23 +02:00
die ();
}
2017-12-01 00:11:00 +01:00
if ( ! is_main_site () ) {
2013-10-25 00:58:23 +02:00
wp_redirect ( network_site_url ( 'wp-signup.php' ) );
die ();
}
// Fix for page title
$wp_query -> is_404 = false ;
2015-10-14 19:32:49 +02:00
/**
* Fires before the Site Signup page is loaded .
*
* @ since 4.4 . 0
*/
do_action ( 'before_signup_header' );
2013-10-25 00:58:23 +02:00
/**
* Prints styles for front - end Multisite signup pages
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*/
function wpmu_signup_stylesheet () {
?>
< style type = " text/css " >
. mu_register { width : 90 % ; margin : 0 auto ; }
. mu_register form { margin - top : 2 em ; }
2018-04-30 09:05:21 +02:00
. mu_register . error { font - weight : 600 ; padding : 10 px ; color : #333333; background: #FFEBE8; border: 1px solid #CC0000; }
2013-10-25 00:58:23 +02:00
. mu_register input [ type = " submit " ],
. mu_register #blog_title,
. mu_register #user_email,
. mu_register #blogname,
. mu_register #user_name { width:100%; font-size: 24px; margin:5px 0; }
2015-10-14 01:46:25 +02:00
. mu_register #site-language { display: block; }
2013-10-25 00:58:23 +02:00
. mu_register . prefix_address ,
2018-04-30 09:05:21 +02:00
. mu_register . suffix_address { font - size : 18 px ; display : inline ; }
. mu_register label { font - weight : 600 ; font - size : 15 px ; display : block ; margin : 10 px 0 ; }
2013-10-25 00:58:23 +02:00
. mu_register label . checkbox { display : inline ; }
2018-04-30 09:05:21 +02:00
. mu_register . mu_alert { font - weight : 600 ; padding : 10 px ; color : #333333; background: #ffffe0; border: 1px solid #e6db55; }
2013-10-25 00:58:23 +02:00
</ style >
< ? php
}
add_action ( 'wp_head' , 'wpmu_signup_stylesheet' );
2015-10-06 00:36:24 +02:00
get_header ( 'wp-signup' );
2013-10-25 00:58:23 +02:00
/**
* Fires before the site sign - up form .
*
* @ since 3.0 . 0
*/
do_action ( 'before_signup_form' );
?>
2015-09-15 04:09:24 +02:00
< div id = " signup-content " class = " widecolumn " >
2015-10-03 23:51:25 +02:00
< div class = " mu_register wp-signup-container " >
2013-10-25 00:58:23 +02:00
< ? php
/**
* Generates and displays the Signup and Create Site forms
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*
2016-05-24 06:16:27 +02:00
* @ param string $blogname The new site name .
* @ param string $blog_title The new site title .
* @ param WP_Error | string $errors A WP_Error object containing existing errors . Defaults to empty string .
2013-10-25 00:58:23 +02:00
*/
2013-11-13 04:23:10 +01:00
function show_blog_form ( $blogname = '' , $blog_title = '' , $errors = '' ) {
2016-05-24 06:16:27 +02:00
if ( ! is_wp_error ( $errors ) ) {
$errors = new WP_Error ();
}
2016-10-19 06:47:30 +02:00
$current_network = get_network ();
2013-10-25 00:58:23 +02:00
// Blog name
2017-12-01 00:11:00 +01:00
if ( ! is_subdomain_install () ) {
echo '<label for="blogname">' . __ ( 'Site Name:' ) . '</label>' ;
} else {
echo '<label for="blogname">' . __ ( 'Site Domain:' ) . '</label>' ;
}
2013-10-25 00:58:23 +02:00
2017-12-01 00:11:00 +01:00
if ( $errmsg = $errors -> get_error_message ( 'blogname' ) ) {
?>
< p class = " error " >< ? php echo $errmsg ; ?> </p>
< ? php
}
2013-10-25 00:58:23 +02:00
2017-12-01 00:11:00 +01:00
if ( ! is_subdomain_install () ) {
echo '<span class="prefix_address">' . $current_network -> domain . $current_network -> path . '</span><input name="blogname" type="text" id="blogname" value="' . esc_attr ( $blogname ) . '" maxlength="60" /><br />' ;
} else {
echo '<input name="blogname" type="text" id="blogname" value="' . esc_attr ( $blogname ) . '" maxlength="60" /><span class="suffix_address">.' . ( $site_domain = preg_replace ( '|^www\.|' , '' , $current_network -> domain ) ) . '</span><br />' ;
}
2013-10-25 00:58:23 +02:00
2016-05-24 22:44:29 +02:00
if ( ! is_user_logged_in () ) {
if ( ! is_subdomain_install () ) {
2016-10-19 06:47:30 +02:00
$site = $current_network -> domain . $current_network -> path . __ ( 'sitename' );
2016-05-24 22:44:29 +02:00
} else {
2016-10-19 06:47:30 +02:00
$site = __ ( 'domain' ) . '.' . $site_domain . $current_network -> path ;
2016-05-24 22:44:29 +02:00
}
/* translators: %s: site address */
echo '<p>(<strong>' . sprintf ( __ ( 'Your address will be %s.' ), $site ) . '</strong>) ' . __ ( 'Must be at least 4 characters, letters and numbers only. It cannot be changed, so choose carefully!' ) . '</p>' ;
2013-10-25 00:58:23 +02:00
}
// Blog Title
?>
2017-12-01 00:11:00 +01:00
< label for = " blog_title " >< ? php _e ( 'Site Title:' ); ?> </label>
< ? php if ( $errmsg = $errors -> get_error_message ( 'blog_title' ) ) { ?>
< p class = " error " >< ? php echo $errmsg ; ?> </p>
< ? php
}
echo '<input name="blog_title" type="text" id="blog_title" value="' . esc_attr ( $blog_title ) . '" />' ;
2013-10-25 00:58:23 +02:00
?>
2015-10-14 01:46:25 +02:00
< ? php
// Site Language.
$languages = signup_get_available_languages ();
if ( ! empty ( $languages ) ) :
?>
< p >
< label for = " site-language " >< ? php _e ( 'Site Language:' ); ?> </label>
< ? php
// Network default.
$lang = get_site_option ( 'WPLANG' );
if ( isset ( $_POST [ 'WPLANG' ] ) ) {
$lang = $_POST [ 'WPLANG' ];
}
// Use US English if the default isn't available.
if ( ! in_array ( $lang , $languages ) ) {
$lang = '' ;
}
2017-12-01 00:11:00 +01:00
wp_dropdown_languages (
array (
'name' => 'WPLANG' ,
'id' => 'site-language' ,
'selected' => $lang ,
'languages' => $languages ,
'show_available_translations' => false ,
)
);
2015-10-14 01:46:25 +02:00
?>
</ p >
2017-11-23 05:09:49 +01:00
< ? php
endif ; // Languages.
$blog_public_on_checked = $blog_public_off_checked = '' ;
2017-12-01 00:11:00 +01:00
if ( isset ( $_POST [ 'blog_public' ] ) && '0' == $_POST [ 'blog_public' ] ) {
$blog_public_off_checked = 'checked="checked"' ;
} else {
$blog_public_on_checked = 'checked="checked"' ;
}
2017-11-23 05:09:49 +01:00
?>
2015-10-14 01:46:25 +02:00
2013-10-25 00:58:23 +02:00
< div id = " privacy " >
2017-12-01 00:11:00 +01:00
< p class = " privacy-intro " >
< label for = " blog_public_on " >< ? php _e ( 'Privacy:' ); ?> </label>
< ? php _e ( 'Allow search engines to index this site.' ); ?>
< br style = " clear:both " />
< label class = " checkbox " for = " blog_public_on " >
< input type = " radio " id = " blog_public_on " name = " blog_public " value = " 1 " < ? php echo $blog_public_on_checked ; ?> />
< strong >< ? php _e ( 'Yes' ); ?> </strong>
</ label >
< label class = " checkbox " for = " blog_public_off " >
< input type = " radio " id = " blog_public_off " name = " blog_public " value = " 0 " < ? php echo $blog_public_off_checked ; ?> />
< strong >< ? php _e ( 'No' ); ?> </strong>
</ label >
</ p >
2013-10-25 00:58:23 +02:00
</ div >
< ? php
/**
* Fires after the site sign - up form .
*
* @ since 3.0 . 0
*
2016-05-24 06:16:27 +02:00
* @ param WP_Error $errors A WP_Error object possibly containing 'blogname' or 'blog_title' errors .
2013-10-25 00:58:23 +02:00
*/
do_action ( 'signup_blogform' , $errors );
}
/**
* Validate the new site signup
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*
* @ return array Contains the new site data and error messages .
*/
function validate_blog_form () {
$user = '' ;
2017-12-01 00:11:00 +01:00
if ( is_user_logged_in () ) {
2013-10-25 00:58:23 +02:00
$user = wp_get_current_user ();
2017-12-01 00:11:00 +01:00
}
2013-10-25 00:58:23 +02:00
2017-12-01 00:11:00 +01:00
return wpmu_validate_blog_signup ( $_POST [ 'blogname' ], $_POST [ 'blog_title' ], $user );
2013-10-25 00:58:23 +02:00
}
/**
* Display user registration form
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*
2016-05-24 06:16:27 +02:00
* @ param string $user_name The entered username .
* @ param string $user_email The entered email address .
* @ param WP_Error | string $errors A WP_Error object containing existing errors . Defaults to empty string .
2013-10-25 00:58:23 +02:00
*/
2017-12-01 00:11:00 +01:00
function show_user_form ( $user_name = '' , $user_email = '' , $errors = '' ) {
2016-05-24 06:16:27 +02:00
if ( ! is_wp_error ( $errors ) ) {
$errors = new WP_Error ();
}
2013-10-25 00:58:23 +02:00
// User name
2017-12-01 00:11:00 +01:00
echo '<label for="user_name">' . __ ( 'Username:' ) . '</label>' ;
if ( $errmsg = $errors -> get_error_message ( 'user_name' ) ) {
echo '<p class="error">' . $errmsg . '</p>' ;
2013-10-25 00:58:23 +02:00
}
2017-12-01 00:11:00 +01:00
echo '<input name="user_name" type="text" id="user_name" value="' . esc_attr ( $user_name ) . '" autocapitalize="none" autocorrect="off" maxlength="60" /><br />' ;
2013-10-25 00:58:23 +02:00
_e ( '(Must be at least 4 characters, letters and numbers only.)' );
?>
2017-12-01 00:11:00 +01:00
< label for = " user_email " >< ? php _e ( 'Email Address:' ); ?> </label>
< ? php if ( $errmsg = $errors -> get_error_message ( 'user_email' ) ) { ?>
< p class = " error " >< ? php echo $errmsg ; ?> </p>
2013-10-25 00:58:23 +02:00
< ? php } ?>
2017-12-01 00:11:00 +01:00
< input name = " user_email " type = " email " id = " user_email " value = " <?php echo esc_attr( $user_email ); ?> " maxlength = " 200 " />< br />< ? php _e ( 'We send your registration email to this address. (Double-check your email address before continuing.)' ); ?>
2013-10-25 00:58:23 +02:00
< ? php
2017-12-01 00:11:00 +01:00
if ( $errmsg = $errors -> get_error_message ( 'generic' ) ) {
2013-10-25 00:58:23 +02:00
echo '<p class="error">' . $errmsg . '</p>' ;
}
/**
* Fires at the end of the user registration form on the site sign - up form .
*
* @ since 3.0 . 0
*
2017-09-09 15:19:45 +02:00
* @ param WP_Error $errors A WP_Error object containing 'user_name' or 'user_email' errors .
2013-10-25 00:58:23 +02:00
*/
do_action ( 'signup_extra_fields' , $errors );
}
/**
* Validate user signup name and email
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*
* @ return array Contains username , email , and error messages .
*/
function validate_user_form () {
2017-12-01 00:11:00 +01:00
return wpmu_validate_user_signup ( $_POST [ 'user_name' ], $_POST [ 'user_email' ] );
2013-10-25 00:58:23 +02:00
}
/**
* Allow returning users to sign up for another site
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*
2016-05-24 06:16:27 +02:00
* @ param string $blogname The new site name
* @ param string $blog_title The new site title .
* @ param WP_Error | string $errors A WP_Error object containing existing errors . Defaults to empty string .
2013-10-25 00:58:23 +02:00
*/
2013-11-13 04:23:10 +01:00
function signup_another_blog ( $blogname = '' , $blog_title = '' , $errors = '' ) {
2013-10-25 00:58:23 +02:00
$current_user = wp_get_current_user ();
2017-12-01 00:11:00 +01:00
if ( ! is_wp_error ( $errors ) ) {
2013-10-25 00:58:23 +02:00
$errors = new WP_Error ();
}
$signup_defaults = array (
'blogname' => $blogname ,
'blog_title' => $blog_title ,
2017-12-01 00:11:00 +01:00
'errors' => $errors ,
2013-10-25 00:58:23 +02:00
);
/**
2016-05-23 18:44:27 +02:00
* Filters the default site sign - up variables .
2013-10-25 00:58:23 +02:00
*
* @ since 3.0 . 0
*
* @ param array $signup_defaults {
* An array of default site sign - up variables .
*
2016-05-24 06:16:27 +02:00
* @ type string $blogname The site blogname .
* @ type string $blog_title The site title .
* @ type WP_Error $errors A WP_Error object possibly containing 'blogname' or 'blog_title' errors .
2013-10-25 00:58:23 +02:00
* }
*/
$filtered_results = apply_filters ( 'signup_another_blog_init' , $signup_defaults );
2017-12-01 00:11:00 +01:00
$blogname = $filtered_results [ 'blogname' ];
2013-10-25 00:58:23 +02:00
$blog_title = $filtered_results [ 'blog_title' ];
2017-12-01 00:11:00 +01:00
$errors = $filtered_results [ 'errors' ];
2013-10-25 00:58:23 +02:00
2016-10-19 06:47:30 +02:00
echo '<h2>' . sprintf ( __ ( 'Get <em>another</em> %s site in seconds' ), get_network () -> site_name ) . '</h2>' ;
2013-10-25 00:58:23 +02:00
2018-02-27 03:31:31 +01:00
if ( $errors -> has_errors () ) {
2013-10-25 00:58:23 +02:00
echo '<p>' . __ ( 'There was a problem, please correct the form below and try again.' ) . '</p>' ;
}
?>
2017-12-01 00:11:00 +01:00
< p >< ? php printf ( __ ( 'Welcome back, %s. By filling out the form below, you can <strong>add another site to your account</strong>. There is no limit to the number of sites you can have, so create to your heart’s content, but write responsibly!' ), $current_user -> display_name ); ?> </p>
2013-10-25 00:58:23 +02:00
< ? php
2017-12-01 00:11:00 +01:00
$blogs = get_blogs_of_user ( $current_user -> ID );
if ( ! empty ( $blogs ) ) {
?>
2013-10-25 00:58:23 +02:00
2017-12-01 00:11:00 +01:00
< p >< ? php _e ( 'Sites you are already a member of:' ); ?> </p>
2013-10-25 00:58:23 +02:00
< ul >
2017-12-01 00:11:00 +01:00
< ? php
foreach ( $blogs as $blog ) {
2013-10-25 00:58:23 +02:00
$home_url = get_home_url ( $blog -> userblog_id );
echo '<li><a href="' . esc_url ( $home_url ) . '">' . $home_url . '</a></li>' ;
2017-12-01 00:11:00 +01:00
}
?>
2013-10-25 00:58:23 +02:00
</ ul >
< ? php } ?>
2017-12-01 00:11:00 +01:00
< p >< ? php _e ( 'If you’re not going to use a great site domain, leave it for a new user. Now have at it!' ); ?> </p>
2013-10-25 00:58:23 +02:00
< form id = " setupform " method = " post " action = " wp-signup.php " >
< input type = " hidden " name = " stage " value = " gimmeanotherblog " />
< ? php
/**
* Hidden sign - up form fields output when creating another site or user .
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*
* @ param string $context A string describing the steps of the sign - up process . The value can be
* 'create-another-site' , 'validate-user' , or 'validate-site' .
*/
do_action ( 'signup_hidden_fields' , 'create-another-site' );
?>
2017-12-01 00:11:00 +01:00
< ? php show_blog_form ( $blogname , $blog_title , $errors ); ?>
< p class = " submit " >< input type = " submit " name = " submit " class = " submit " value = " <?php esc_attr_e( 'Create Site' ); ?> " /></ p >
2013-10-25 00:58:23 +02:00
</ form >
< ? php
}
/**
2018-06-28 04:21:21 +02:00
* Validate a new site signup for an existing user .
*
* @ global string $blogname The new site ' s subdomain or directory name .
* @ global string $blog_title The new site ' s title .
* @ global WP_Error $errors Existing errors in the global scope .
* @ global string $domain The new site ' s domain .
* @ global string $path The new site ' s path .
2013-10-25 00:58:23 +02:00
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*
2016-01-28 04:51:26 +01:00
* @ return null | bool True if site signup was validated , false if error .
2015-06-27 03:03:25 +02:00
* The function halts all execution if the user is not logged in .
2013-10-25 00:58:23 +02:00
*/
function validate_another_blog_signup () {
2017-08-12 15:11:43 +02:00
global $blogname , $blog_title , $errors , $domain , $path ;
2013-10-25 00:58:23 +02:00
$current_user = wp_get_current_user ();
2014-11-30 22:23:23 +01:00
if ( ! is_user_logged_in () ) {
2013-10-25 00:58:23 +02:00
die ();
2014-11-30 22:23:23 +01:00
}
2013-10-25 00:58:23 +02:00
$result = validate_blog_form ();
2014-05-16 16:43:25 +02:00
2014-07-17 11:12:16 +02:00
// Extracted values set/overwrite globals.
2017-12-01 00:11:00 +01:00
$domain = $result [ 'domain' ];
$path = $result [ 'path' ];
$blogname = $result [ 'blogname' ];
2014-05-16 16:43:25 +02:00
$blog_title = $result [ 'blog_title' ];
2017-12-01 00:11:00 +01:00
$errors = $result [ 'errors' ];
2013-10-25 00:58:23 +02:00
2018-02-27 03:31:31 +01:00
if ( $errors -> has_errors () ) {
2017-12-01 00:11:00 +01:00
signup_another_blog ( $blogname , $blog_title , $errors );
2013-10-25 00:58:23 +02:00
return false ;
}
$public = ( int ) $_POST [ 'blog_public' ];
$blog_meta_defaults = array (
'lang_id' => 1 ,
2017-12-01 00:11:00 +01:00
'public' => $public ,
2013-10-25 00:58:23 +02:00
);
2015-10-14 01:46:25 +02:00
// Handle the language setting for the new site.
if ( ! empty ( $_POST [ 'WPLANG' ] ) ) {
$languages = signup_get_available_languages ();
if ( in_array ( $_POST [ 'WPLANG' ], $languages ) ) {
$language = wp_unslash ( sanitize_text_field ( $_POST [ 'WPLANG' ] ) );
if ( $language ) {
$blog_meta_defaults [ 'WPLANG' ] = $language ;
}
}
}
2013-10-25 00:58:23 +02:00
/**
2016-05-23 18:44:27 +02:00
* Filters the new site meta variables .
2013-10-25 00:58:23 +02:00
*
2016-05-23 19:07:28 +02:00
* Use the { @ see 'add_signup_meta' } filter instead .
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2016-05-23 19:07:28 +02:00
* @ deprecated 3.0 . 0 Use the { @ see 'add_signup_meta' } filter instead .
2013-10-25 00:58:23 +02:00
*
* @ param array $blog_meta_defaults An array of default blog meta variables .
*/
2014-05-16 16:43:25 +02:00
$meta_defaults = apply_filters ( 'signup_create_blog_meta' , $blog_meta_defaults );
2015-10-14 01:46:25 +02:00
2013-10-25 00:58:23 +02:00
/**
2016-05-23 18:44:27 +02:00
* Filters the new default site meta variables .
2013-10-25 00:58:23 +02:00
*
* @ since 3.0 . 0
*
* @ param array $meta {
* An array of default site meta variables .
*
* @ type int $lang_id The language ID .
* @ type int $blog_public Whether search engines should be discouraged from indexing the site . 1 for true , 0 for false .
* }
*/
2014-05-16 16:43:25 +02:00
$meta = apply_filters ( 'add_signup_meta' , $meta_defaults );
2013-10-25 00:58:23 +02:00
2017-08-12 15:11:43 +02:00
$blog_id = wpmu_create_blog ( $domain , $path , $blog_title , $current_user -> ID , $meta , get_current_network_id () );
2015-10-03 02:34:25 +02:00
if ( is_wp_error ( $blog_id ) ) {
return false ;
}
confirm_another_blog_signup ( $domain , $path , $blog_title , $current_user -> user_login , $current_user -> user_email , $meta , $blog_id );
2013-10-25 00:58:23 +02:00
return true ;
}
/**
2016-01-28 04:51:26 +01:00
* Confirm a new site signup .
2013-10-25 00:58:23 +02:00
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2015-10-03 02:34:25 +02:00
* @ since 4.4 . 0 Added the `$blog_id` parameter .
2013-10-25 00:58:23 +02:00
*
2016-01-28 04:51:26 +01:00
* @ param string $domain The domain URL .
* @ param string $path The site root path .
* @ param string $blog_title The site title .
* @ param string $user_name The username .
* @ param string $user_email The user ' s email address .
2016-05-23 19:07:28 +02:00
* @ param array $meta Any additional meta from the { @ see 'add_signup_meta' } filter in validate_blog_signup () .
2016-01-28 04:51:26 +01:00
* @ param int $blog_id The site ID .
2013-10-25 00:58:23 +02:00
*/
2015-10-03 02:34:25 +02:00
function confirm_another_blog_signup ( $domain , $path , $blog_title , $user_name , $user_email = '' , $meta = array (), $blog_id = 0 ) {
if ( $blog_id ) {
switch_to_blog ( $blog_id );
$home_url = home_url ( '/' );
$login_url = wp_login_url ();
restore_current_blog ();
} else {
$home_url = 'http://' . $domain . $path ;
$login_url = 'http://' . $domain . $path . 'wp-login.php' ;
}
2017-12-01 00:11:00 +01:00
$site = sprintf (
'<a href="%1$s">%2$s</a>' ,
2015-10-03 02:34:25 +02:00
esc_url ( $home_url ),
$blog_title
);
2013-10-25 00:58:23 +02:00
?>
2017-12-01 00:11:00 +01:00
< h2 >
< ? php
2016-05-24 22:44:29 +02:00
/* translators: %s: site name */
printf ( __ ( 'The site %s is yours.' ), $site );
2017-12-01 00:11:00 +01:00
?>
</ h2 >
2013-10-25 00:58:23 +02:00
< p >
2017-12-01 00:11:00 +01:00
< ? php
printf (
2017-10-18 19:36:50 +02:00
/* translators: 1: link to new site, 2: login URL, 3: username */
__ ( '%1$s is your new site. <a href="%2$s">Log in</a> as “%3$s” using your existing password.' ),
sprintf (
'<a href="%s">%s</a>' ,
esc_url ( $home_url ),
untrailingslashit ( $domain . $path )
),
2015-10-03 02:34:25 +02:00
esc_url ( $login_url ),
$user_name
2017-12-01 00:11:00 +01:00
);
?>
2013-10-25 00:58:23 +02:00
</ p >
< ? php
/**
* Fires when the site or user sign - up process is complete .
*
* @ since 3.0 . 0
*/
do_action ( 'signup_finished' );
}
/**
* Setup the new user signup process
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*
2016-05-24 06:16:27 +02:00
* @ param string $user_name The username .
* @ param string $user_email The user ' s email .
* @ param WP_Error | string $errors A WP_Error object containing existing errors . Defaults to empty string .
2013-10-25 00:58:23 +02:00
*/
2013-11-13 04:23:10 +01:00
function signup_user ( $user_name = '' , $user_email = '' , $errors = '' ) {
global $active_signup ;
2013-10-25 00:58:23 +02:00
2017-12-01 00:11:00 +01:00
if ( ! is_wp_error ( $errors ) ) {
2013-10-25 00:58:23 +02:00
$errors = new WP_Error ();
2017-12-01 00:11:00 +01:00
}
2013-10-25 00:58:23 +02:00
2017-12-01 00:11:00 +01:00
$signup_for = isset ( $_POST [ 'signup_for' ] ) ? esc_html ( $_POST [ 'signup_for' ] ) : 'blog' ;
2013-10-25 00:58:23 +02:00
$signup_user_defaults = array (
'user_name' => $user_name ,
'user_email' => $user_email ,
'errors' => $errors ,
);
/**
2016-05-23 18:44:27 +02:00
* Filters the default user variables used on the user sign - up form .
2013-10-25 00:58:23 +02:00
*
* @ since 3.0 . 0
*
* @ param array $signup_user_defaults {
* An array of default user variables .
*
2016-05-24 06:16:27 +02:00
* @ type string $user_name The user username .
* @ type string $user_email The user email address .
* @ type WP_Error $errors A WP_Error object with possible errors relevant to the sign - up user .
2013-10-25 00:58:23 +02:00
* }
*/
$filtered_results = apply_filters ( 'signup_user_init' , $signup_user_defaults );
2017-12-01 00:11:00 +01:00
$user_name = $filtered_results [ 'user_name' ];
$user_email = $filtered_results [ 'user_email' ];
$errors = $filtered_results [ 'errors' ];
2013-10-25 00:58:23 +02:00
?>
2017-12-01 00:11:00 +01:00
< h2 >
< ? php
2016-05-24 22:44:29 +02:00
/* translators: %s: name of the network */
2016-10-19 06:47:30 +02:00
printf ( __ ( 'Get your own %s account in seconds' ), get_network () -> site_name );
2017-12-01 00:11:00 +01:00
?>
</ h2 >
2014-07-08 19:52:14 +02:00
< form id = " setupform " method = " post " action = " wp-signup.php " novalidate = " novalidate " >
2013-10-25 00:58:23 +02:00
< input type = " hidden " name = " stage " value = " validate-user-signup " />
< ? php
2013-10-25 00:59:20 +02:00
/** This action is documented in wp-signup.php */
2013-10-25 00:58:23 +02:00
do_action ( 'signup_hidden_fields' , 'validate-user' );
?>
2017-12-01 00:11:00 +01:00
< ? php show_user_form ( $user_name , $user_email , $errors ); ?>
2013-10-25 00:58:23 +02:00
< p >
< ? php if ( $active_signup == 'blog' ) { ?>
< input id = " signupblog " type = " hidden " name = " signup_for " value = " blog " />
< ? php } elseif ( $active_signup == 'user' ) { ?>
< input id = " signupblog " type = " hidden " name = " signup_for " value = " user " />
< ? php } else { ?>
< input id = " signupblog " type = " radio " name = " signup_for " value = " blog " < ? php checked ( $signup_for , 'blog' ); ?> />
2017-12-01 00:11:00 +01:00
< label class = " checkbox " for = " signupblog " >< ? php _e ( 'Gimme a site!' ); ?> </label>
2013-10-25 00:58:23 +02:00
< br />
< input id = " signupuser " type = " radio " name = " signup_for " value = " user " < ? php checked ( $signup_for , 'user' ); ?> />
2017-12-01 00:11:00 +01:00
< label class = " checkbox " for = " signupuser " >< ? php _e ( 'Just a username, please.' ); ?> </label>
2013-10-25 00:58:23 +02:00
< ? php } ?>
</ p >
2017-12-01 00:11:00 +01:00
< p class = " submit " >< input type = " submit " name = " submit " class = " submit " value = " <?php esc_attr_e( 'Next' ); ?> " /></ p >
2013-10-25 00:58:23 +02:00
</ form >
< ? php
}
/**
* Validate the new user signup
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*
* @ return bool True if new user signup was validated , false if error
*/
function validate_user_signup () {
2017-12-01 00:11:00 +01:00
$result = validate_user_form ();
$user_name = $result [ 'user_name' ];
2014-05-16 16:53:15 +02:00
$user_email = $result [ 'user_email' ];
2017-12-01 00:11:00 +01:00
$errors = $result [ 'errors' ];
2013-10-25 00:58:23 +02:00
2018-02-27 03:31:31 +01:00
if ( $errors -> has_errors () ) {
2017-12-01 00:11:00 +01:00
signup_user ( $user_name , $user_email , $errors );
2013-10-25 00:58:23 +02:00
return false ;
}
if ( 'blog' == $_POST [ 'signup_for' ] ) {
2017-12-01 00:11:00 +01:00
signup_blog ( $user_name , $user_email );
2013-10-25 00:58:23 +02:00
return false ;
}
2013-10-25 00:59:20 +02:00
/** This filter is documented in wp-signup.php */
2013-10-25 00:58:23 +02:00
wpmu_signup_user ( $user_name , $user_email , apply_filters ( 'add_signup_meta' , array () ) );
2017-12-01 00:11:00 +01:00
confirm_user_signup ( $user_name , $user_email );
2013-10-25 00:58:23 +02:00
return true ;
}
/**
* New user signup confirmation
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*
* @ param string $user_name The username
* @ param string $user_email The user ' s email address
*/
2017-12-01 00:11:00 +01:00
function confirm_user_signup ( $user_name , $user_email ) {
2013-10-25 00:58:23 +02:00
?>
2017-12-01 00:11:00 +01:00
< h2 >
< ? php
/* translators: %s: username */
printf ( __ ( '%s is your new username' ), $user_name )
?>
</ h2 >
< p >< ? php _e ( 'But, before you can start using your new username, <strong>you must activate it</strong>.' ); ?> </p>
< p >
< ? php
/* translators: %s: email address */
printf ( __ ( 'Check your inbox at %s and click the link given.' ), '<strong>' . $user_email . '</strong>' );
?>
</ p >
2013-10-25 00:58:23 +02:00
< p >< ? php _e ( 'If you do not activate your username within two days, you will have to sign up again.' ); ?> </p>
< ? php
2013-10-25 00:59:20 +02:00
/** This action is documented in wp-signup.php */
2013-10-25 00:58:23 +02:00
do_action ( 'signup_finished' );
}
/**
* Setup the new site signup
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*
2016-05-24 06:16:27 +02:00
* @ param string $user_name The username .
* @ param string $user_email The user ' s email address .
* @ param string $blogname The site name .
* @ param string $blog_title The site title .
* @ param WP_Error | string $errors A WP_Error object containing existing errors . Defaults to empty string .
2013-10-25 00:58:23 +02:00
*/
2017-12-01 00:11:00 +01:00
function signup_blog ( $user_name = '' , $user_email = '' , $blogname = '' , $blog_title = '' , $errors = '' ) {
if ( ! is_wp_error ( $errors ) ) {
2013-10-25 00:58:23 +02:00
$errors = new WP_Error ();
2017-12-01 00:11:00 +01:00
}
2013-10-25 00:58:23 +02:00
$signup_blog_defaults = array (
'user_name' => $user_name ,
'user_email' => $user_email ,
'blogname' => $blogname ,
'blog_title' => $blog_title ,
2017-12-01 00:11:00 +01:00
'errors' => $errors ,
2013-10-25 00:58:23 +02:00
);
/**
2016-05-23 18:44:27 +02:00
* Filters the default site creation variables for the site sign - up form .
2013-10-25 00:58:23 +02:00
*
* @ since 3.0 . 0
*
* @ param array $signup_blog_defaults {
* An array of default site creation variables .
*
2016-05-24 06:16:27 +02:00
* @ type string $user_name The user username .
* @ type string $user_email The user email address .
* @ type string $blogname The blogname .
* @ type string $blog_title The title of the site .
* @ type WP_Error $errors A WP_Error object with possible errors relevant to new site creation variables .
2013-10-25 00:58:23 +02:00
* }
*/
$filtered_results = apply_filters ( 'signup_blog_init' , $signup_blog_defaults );
2017-12-01 00:11:00 +01:00
$user_name = $filtered_results [ 'user_name' ];
2013-10-25 00:58:23 +02:00
$user_email = $filtered_results [ 'user_email' ];
2017-12-01 00:11:00 +01:00
$blogname = $filtered_results [ 'blogname' ];
2013-10-25 00:58:23 +02:00
$blog_title = $filtered_results [ 'blog_title' ];
2017-12-01 00:11:00 +01:00
$errors = $filtered_results [ 'errors' ];
2013-10-25 00:58:23 +02:00
2017-12-01 00:11:00 +01:00
if ( empty ( $blogname ) ) {
2013-10-25 00:58:23 +02:00
$blogname = $user_name ;
2017-12-01 00:11:00 +01:00
}
2013-10-25 00:58:23 +02:00
?>
< form id = " setupform " method = " post " action = " wp-signup.php " >
< input type = " hidden " name = " stage " value = " validate-blog-signup " />
2017-12-01 00:11:00 +01:00
< input type = " hidden " name = " user_name " value = " <?php echo esc_attr( $user_name ); ?> " />
< input type = " hidden " name = " user_email " value = " <?php echo esc_attr( $user_email ); ?> " />
2013-10-25 00:58:23 +02:00
< ? php
2013-10-25 00:59:20 +02:00
/** This action is documented in wp-signup.php */
2013-10-25 00:58:23 +02:00
do_action ( 'signup_hidden_fields' , 'validate-site' );
?>
2017-12-01 00:11:00 +01:00
< ? php show_blog_form ( $blogname , $blog_title , $errors ); ?>
< p class = " submit " >< input type = " submit " name = " submit " class = " submit " value = " <?php esc_attr_e( 'Signup' ); ?> " /></ p >
2013-10-25 00:58:23 +02:00
</ form >
< ? php
}
/**
* Validate new site signup
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*
* @ return bool True if the site signup was validated , false if error
*/
function validate_blog_signup () {
// Re-validate user info.
2014-05-16 16:53:15 +02:00
$user_result = wpmu_validate_user_signup ( $_POST [ 'user_name' ], $_POST [ 'user_email' ] );
2017-12-01 00:11:00 +01:00
$user_name = $user_result [ 'user_name' ];
$user_email = $user_result [ 'user_email' ];
2014-05-16 16:53:15 +02:00
$user_errors = $user_result [ 'errors' ];
2013-10-25 00:58:23 +02:00
2018-02-27 03:31:31 +01:00
if ( $user_errors -> has_errors () ) {
2014-05-16 16:53:15 +02:00
signup_user ( $user_name , $user_email , $user_errors );
2013-10-25 00:58:23 +02:00
return false ;
}
2017-12-01 00:11:00 +01:00
$result = wpmu_validate_blog_signup ( $_POST [ 'blogname' ], $_POST [ 'blog_title' ] );
$domain = $result [ 'domain' ];
$path = $result [ 'path' ];
$blogname = $result [ 'blogname' ];
2014-05-16 16:53:15 +02:00
$blog_title = $result [ 'blog_title' ];
2017-12-01 00:11:00 +01:00
$errors = $result [ 'errors' ];
2013-10-25 00:58:23 +02:00
2018-02-27 03:31:31 +01:00
if ( $errors -> has_errors () ) {
2017-12-01 00:11:00 +01:00
signup_blog ( $user_name , $user_email , $blogname , $blog_title , $errors );
2013-10-25 00:58:23 +02:00
return false ;
}
2017-12-01 00:11:00 +01:00
$public = ( int ) $_POST [ 'blog_public' ];
$signup_meta = array (
'lang_id' => 1 ,
'public' => $public ,
);
2013-10-25 00:58:23 +02:00
2015-10-14 01:46:25 +02:00
// Handle the language setting for the new site.
if ( ! empty ( $_POST [ 'WPLANG' ] ) ) {
$languages = signup_get_available_languages ();
if ( in_array ( $_POST [ 'WPLANG' ], $languages ) ) {
$language = wp_unslash ( sanitize_text_field ( $_POST [ 'WPLANG' ] ) );
if ( $language ) {
$signup_meta [ 'WPLANG' ] = $language ;
}
}
}
2013-10-25 00:59:20 +02:00
/** This filter is documented in wp-signup.php */
2014-05-16 16:53:15 +02:00
$meta = apply_filters ( 'add_signup_meta' , $signup_meta );
2013-10-25 00:58:23 +02:00
2017-12-01 00:11:00 +01:00
wpmu_signup_blog ( $domain , $path , $blog_title , $user_name , $user_email , $meta );
confirm_blog_signup ( $domain , $path , $blog_title , $user_name , $user_email , $meta );
2013-10-25 00:58:23 +02:00
return true ;
}
/**
* New site signup confirmation
*
2017-08-01 22:44:43 +02:00
* @ since MU ( 3.0 . 0 )
2013-10-25 00:58:23 +02:00
*
* @ param string $domain The domain URL
* @ param string $path The site root path
* @ param string $blog_title The new site title
* @ param string $user_name The user ' s username
* @ param string $user_email The user ' s email address
2016-05-23 19:07:28 +02:00
* @ param array $meta Any additional meta from the { @ see 'add_signup_meta' } filter in validate_blog_signup ()
2013-10-25 00:58:23 +02:00
*/
function confirm_blog_signup ( $domain , $path , $blog_title , $user_name = '' , $user_email = '' , $meta = array () ) {
?>
2017-12-01 00:11:00 +01:00
< h2 >
< ? php
/* translators: %s: site address */
printf ( __ ( 'Congratulations! Your new site, %s, is almost ready.' ), " <a href='http:// { $domain } { $path } '> { $blog_title } </a> " )
?>
</ h2 >
2013-10-25 00:58:23 +02:00
2017-12-01 00:11:00 +01:00
< p >< ? php _e ( 'But, before you can start using your site, <strong>you must activate it</strong>.' ); ?> </p>
< p >
< ? php
/* translators: %s: email address */
printf ( __ ( 'Check your inbox at %s and click the link given.' ), '<strong>' . $user_email . '</strong>' );
?>
</ p >
2013-10-25 00:58:23 +02:00
< p >< ? php _e ( 'If you do not activate your site within two days, you will have to sign up again.' ); ?> </p>
< h2 >< ? php _e ( 'Still waiting for your email?' ); ?> </h2>
< p >
2017-12-01 00:11:00 +01:00
< ? php _e ( 'If you haven’t received your email yet, there are a number of things you can do:' ); ?>
2013-10-25 00:58:23 +02:00
< ul id = " noemail-tips " >
2017-12-01 00:11:00 +01:00
< li >< p >< strong >< ? php _e ( 'Wait a little longer. Sometimes delivery of email can be delayed by processes outside of our control.' ); ?> </strong></p></li>
< li >< p >< ? php _e ( 'Check the junk or spam folder of your email client. Sometime emails wind up there by mistake.' ); ?> </p></li>
< li >
< ? php
2016-05-24 22:44:29 +02:00
/* translators: %s: email address */
printf ( __ ( 'Have you entered your email correctly? You have entered %s, if it’s incorrect, you will not receive your email.' ), $user_email );
2017-12-01 00:11:00 +01:00
?>
</ li >
2013-10-25 00:58:23 +02:00
</ ul >
</ p >
< ? php
2013-10-25 00:59:20 +02:00
/** This action is documented in wp-signup.php */
2013-10-25 00:58:23 +02:00
do_action ( 'signup_finished' );
}
2015-10-14 01:46:25 +02:00
/**
* Retrieves languages available during the site / user signup process .
*
* @ since 4.4 . 0
*
* @ see get_available_languages ()
*
* @ return array List of available languages .
*/
function signup_get_available_languages () {
/**
2016-05-23 18:44:27 +02:00
* Filters the list of available languages for front - end site signups .
2015-10-14 01:46:25 +02:00
*
* Passing an empty array to this hook will disable output of the setting on the
* signup form , and the default language will be used when creating the site .
*
* Languages not already installed will be stripped .
*
* @ since 4.4 . 0
*
* @ param array $available_languages Available languages .
*/
$languages = ( array ) apply_filters ( 'signup_get_available_languages' , get_available_languages () );
/*
* Strip any non - installed languages and return .
*
* Re - call get_available_languages () here in case a language pack was installed
* in a callback hooked to the 'signup_get_available_languages' filter before this point .
*/
return array_intersect_assoc ( $languages , get_available_languages () );
}
2013-10-25 00:58:23 +02:00
// Main
2015-10-07 19:11:25 +02:00
$active_signup = get_site_option ( 'registration' , 'none' );
2016-05-23 18:44:27 +02:00
2013-10-25 00:58:23 +02:00
/**
2016-05-23 18:44:27 +02:00
* Filters the type of site sign - up .
2013-10-25 00:58:23 +02:00
*
* @ since 3.0 . 0
*
* @ param string $active_signup String that returns registration type . The value can be
* 'all' , 'none' , 'blog' , or 'user' .
*/
$active_signup = apply_filters ( 'wpmu_active_signup' , $active_signup );
2017-01-24 12:08:42 +01:00
if ( current_user_can ( 'manage_network' ) ) {
2017-01-20 17:52:39 +01:00
echo '<div class="mu_alert">' ;
_e ( 'Greetings Network Administrator!' );
echo ' ' ;
switch ( $active_signup ) {
case 'none' :
_e ( 'The network currently disallows registrations.' );
break ;
case 'blog' :
_e ( 'The network currently allows site registrations.' );
break ;
case 'user' :
_e ( 'The network currently allows user registrations.' );
break ;
default :
_e ( 'The network currently allows both site and user registrations.' );
break ;
}
echo ' ' ;
/* translators: %s: network settings URL */
printf ( __ ( 'To change or disable registration go to your <a href="%s">Options page</a>.' ), esc_url ( network_admin_url ( 'settings.php' ) ) );
echo '</div>' ;
2016-05-24 22:44:29 +02:00
}
2013-10-25 00:58:23 +02:00
2017-12-01 00:11:00 +01:00
$newblogname = isset ( $_GET [ 'new' ] ) ? strtolower ( preg_replace ( '/^-|-$|[^-a-zA-Z0-9]/' , '' , $_GET [ 'new' ] ) ) : null ;
2013-10-25 00:58:23 +02:00
$current_user = wp_get_current_user ();
if ( $active_signup == 'none' ) {
_e ( 'Registration has been disabled.' );
2017-12-01 00:11:00 +01:00
} elseif ( $active_signup == 'blog' && ! is_user_logged_in () ) {
2015-09-15 19:11:35 +02:00
$login_url = wp_login_url ( network_site_url ( 'wp-signup.php' ) );
2016-05-24 22:44:29 +02:00
/* translators: %s: login URL */
printf ( __ ( 'You must first <a href="%s">log in</a>, and then you can create a new site.' ), $login_url );
2013-10-25 00:58:23 +02:00
} else {
2017-12-01 00:11:00 +01:00
$stage = isset ( $_POST [ 'stage' ] ) ? $_POST [ 'stage' ] : 'default' ;
2013-10-25 00:58:23 +02:00
switch ( $stage ) {
2017-12-01 00:11:00 +01:00
case 'validate-user-signup' :
if ( $active_signup == 'all' || $_POST [ 'signup_for' ] == 'blog' && $active_signup == 'blog' || $_POST [ 'signup_for' ] == 'user' && $active_signup == 'user' ) {
2013-10-25 00:58:23 +02:00
validate_user_signup ();
2017-12-01 00:11:00 +01:00
} else {
2013-10-25 00:58:23 +02:00
_e ( 'User registration has been disabled.' );
2017-12-01 00:11:00 +01:00
}
break ;
2013-10-25 00:58:23 +02:00
case 'validate-blog-signup' :
2017-12-01 00:11:00 +01:00
if ( $active_signup == 'all' || $active_signup == 'blog' ) {
2013-10-25 00:58:23 +02:00
validate_blog_signup ();
2017-12-01 00:11:00 +01:00
} else {
2013-10-25 00:58:23 +02:00
_e ( 'Site registration has been disabled.' );
2017-12-01 00:11:00 +01:00
}
2013-10-25 00:58:23 +02:00
break ;
case 'gimmeanotherblog' :
validate_another_blog_signup ();
break ;
case 'default' :
2017-12-01 00:11:00 +01:00
default :
$user_email = isset ( $_POST [ 'user_email' ] ) ? $_POST [ 'user_email' ] : '' ;
2013-10-25 00:58:23 +02:00
/**
* Fires when the site sign - up form is sent .
*
* @ since 3.0 . 0
*/
do_action ( 'preprocess_signup_form' );
2017-12-01 00:11:00 +01:00
if ( is_user_logged_in () && ( $active_signup == 'all' || $active_signup == 'blog' ) ) {
signup_another_blog ( $newblogname );
} elseif ( ! is_user_logged_in () && ( $active_signup == 'all' || $active_signup == 'user' ) ) {
2013-10-25 00:58:23 +02:00
signup_user ( $newblogname , $user_email );
2017-12-01 00:11:00 +01:00
} elseif ( ! is_user_logged_in () && ( $active_signup == 'blog' ) ) {
2013-10-25 00:58:23 +02:00
_e ( 'Sorry, new registrations are not allowed at this time.' );
2017-12-01 00:11:00 +01:00
} else {
2013-10-25 00:58:23 +02:00
_e ( 'You are logged in already. No need to register again!' );
2017-12-01 00:11:00 +01:00
}
2013-10-25 00:58:23 +02:00
if ( $newblogname ) {
$newblog = get_blogaddress_by_name ( $newblogname );
2017-12-01 00:11:00 +01:00
if ( $active_signup == 'blog' || $active_signup == 'all' ) {
2015-10-30 03:09:24 +01:00
/* translators: %s: site address */
2017-12-01 00:11:00 +01:00
printf (
'<p><em>' . __ ( 'The site you were looking for, %s, does not exist, but you can create it now!' ) . '</em></p>' ,
2015-10-30 03:09:24 +01:00
'<strong>' . $newblog . '</strong>'
);
2017-12-01 00:11:00 +01:00
} else { /* translators: %s: site address */
printf (
'<p><em>' . __ ( 'The site you were looking for, %s, does not exist.' ) . '</em></p>' ,
2015-10-30 03:09:24 +01:00
'<strong>' . $newblog . '</strong>'
);
2017-12-01 00:11:00 +01:00
}
2013-10-25 00:58:23 +02:00
}
break ;
}
}
?>
</ div >
</ div >
< ? php
/**
* Fires after the sign - up forms , before wp_footer .
*
* @ since 3.0 . 0
*/
2017-12-01 00:11:00 +01:00
do_action ( 'after_signup_form' );
?>
2013-10-25 00:58:23 +02:00
2017-12-01 00:11:00 +01:00
< ? php
get_footer ( 'wp-signup' );