at path:ROOT / wp-signup.php
run:R W Run
DIR
2026-01-22 01:53:53
R W Run
DIR
2025-12-13 10:13:24
R W Run
DIR
2026-02-04 13:40:49
R W Run
DIR
2026-02-03 05:23:47
R W Run
DIR
2026-02-04 13:40:50
R W Run
1.39 KB
2026-01-21 14:22:55
R W Run
3.04 KB
2025-12-17 02:14:47
R W Run
0 By
2026-02-06 03:23:15
R W Run
0 By
2024-10-24 20:39:28
R W Run
405 By
2026-02-04 13:40:48
R W Run
0 By
2024-10-24 20:39:28
R W Run
13.8 KB
2026-01-09 22:17:33
R W Run
0 By
2024-10-24 20:39:28
R W Run
24 By
2024-10-23 08:36:08
R W Run
7.18 KB
2026-02-04 13:40:48
R W Run
351 By
2026-02-04 13:40:49
R W Run
0 By
2024-10-24 20:39:28
R W Run
2.27 KB
2026-02-04 13:40:49
R W Run
229 By
2025-12-17 02:14:52
R W Run
5.49 KB
2026-02-04 13:40:49
R W Run
2.43 KB
2026-02-04 13:40:50
R W Run
3.84 KB
2026-02-04 13:40:50
R W Run
50.23 KB
2026-02-04 13:40:50
R W Run
8.52 KB
2026-02-04 13:40:50
R W Run
30.33 KB
2026-02-04 13:40:50
R W Run
33.71 KB
2026-02-04 13:40:50
R W Run
5.09 KB
2026-02-04 13:40:50
R W Run
3.13 KB
2026-02-04 13:40:50
R W Run
error_log
📄wp-signup.php
1<?php
2/**
3 * WordPress Signup Page
4 *
5 * Handles the user registration and site creation process for multisite installations.
6 *
7 * @package WordPress
8 */
9
10/** Sets up the WordPress Environment. */
11require __DIR__ . '/wp-load.php';
12
13add_filter( 'wp_robots', 'wp_robots_no_robots' );
14
15require __DIR__ . '/wp-blog-header.php';
16
17nocache_headers();
18
19if ( is_array( get_site_option( 'illegal_names' ) ) && isset( $_GET['new'] ) && in_array( $_GET['new'], get_site_option( 'illegal_names' ), true ) ) {
20 wp_redirect( network_home_url() );
21 die();
22}
23
24/**
25 * Prints signup_header via wp_head.
26 *
27 * @since MU (3.0.0)
28 */
29function do_signup_header() {
30 /**
31 * Fires within the head section of the site sign-up screen.
32 *
33 * @since 3.0.0
34 */
35 do_action( 'signup_header' );
36}
37add_action( 'wp_head', 'do_signup_header' );
38
39if ( ! is_multisite() ) {
40 wp_redirect( wp_registration_url() );
41 die();
42}
43
44if ( ! is_main_site() ) {
45 wp_redirect( network_site_url( 'wp-signup.php' ) );
46 die();
47}
48
49// Fix for page title.
50$wp_query->is_404 = false;
51
52/**
53 * Fires before the Site Sign-up page is loaded.
54 *
55 * @since 4.4.0
56 */
57do_action( 'before_signup_header' );
58
59/**
60 * Prints styles for front-end Multisite Sign-up pages.
61 *
62 * @since MU (3.0.0)
63 */
64function wpmu_signup_stylesheet() {
65 ?>
66 <style type="text/css">
67 .mu_register { width: 90%; margin: 0 auto; }
68 .mu_register form { margin-top: 2em; }
69 .mu_register fieldset,
70 .mu_register legend { margin: 0; padding: 0; border: none; }
71 .mu_register .error { padding: 10px; color: #333; background: #ffebe8; border: 1px solid #c00; }
72 .mu_register input[type="submit"],
73 .mu_register #blog_title,
74 .mu_register #user_email,
75 .mu_register #blogname,
76 .mu_register #user_name { width: 100%; font-size: 24px; margin: 5px 0; box-sizing: border-box; }
77 .mu_register #site-language { display: block; }
78 .mu_register .prefix_address,
79 .mu_register .suffix_address { font-size: 18px; display: inline-block; direction: ltr; }
80 .mu_register label,
81 .mu_register legend,
82 .mu_register .label-heading { font-weight: 600; font-size: 15px; display: block; margin: 10px 0; }
83 .mu_register legend + p,
84 .mu_register input + p { margin-top: 0; }
85 .mu_register label.checkbox { display: inline; }
86 .mu_register .mu_alert { font-weight: 600; padding: 10px; color: #333; background: #ffffe0; border: 1px solid #e6db55; }
87 .mu_register .mu_alert a { color: inherit; text-decoration: underline; }
88 .mu_register .signup-options .wp-signup-radio-button { display: block; }
89 .mu_register .privacy-intro .wp-signup-radio-button { margin-right: 0.5em; }
90 .rtl .mu_register .wp-signup-blogname { direction: ltr; text-align: right; }
91 </style>
92 <?php
93}
94add_action( 'wp_head', 'wpmu_signup_stylesheet' );
95
96get_header( 'wp-signup' );
97
98/**
99 * Fires before the site Sign-up form.
100 *
101 * @since 3.0.0
102 */
103do_action( 'before_signup_form' );
104?>
105<div id="signup-content" class="widecolumn">
106<div class="mu_register wp-signup-container" role="main">
107<?php
108/**
109 * Generates and displays the Sign-up and Create Site forms.
110 *
111 * @since MU (3.0.0)
112 *
113 * @param string $blogname The new site name.
114 * @param string $blog_title The new site title.
115 * @param WP_Error|string $errors A WP_Error object containing existing errors. Defaults to empty string.
116 */
117function show_blog_form( $blogname = '', $blog_title = '', $errors = '' ) {
118 if ( ! is_wp_error( $errors ) ) {
119 $errors = new WP_Error();
120 }
121
122 $current_network = get_network();
123 // Site name.
124 if ( ! is_subdomain_install() ) {
125 echo '<label for="blogname">' . __( 'Site Name (subdirectory only):' ) . '</label>';
126 } else {
127 echo '<label for="blogname">' . __( 'Site Domain (subdomain only):' ) . '</label>';
128 }
129
130 $errmsg_blogname = $errors->get_error_message( 'blogname' );
131 $errmsg_blogname_aria = '';
132 if ( $errmsg_blogname ) {
133 $errmsg_blogname_aria = 'wp-signup-blogname-error ';
134 echo '<p class="error" id="wp-signup-blogname-error">' . $errmsg_blogname . '</p>';
135 }
136
137 if ( ! is_subdomain_install() ) {
138 echo '<div class="wp-signup-blogname"><span class="prefix_address" id="prefix-address">' . $current_network->domain . $current_network->path . '</span><input name="blogname" type="text" id="blogname" value="' . esc_attr( $blogname ) . '" maxlength="60" autocomplete="off" required="required" aria-describedby="' . $errmsg_blogname_aria . 'prefix-address" /></div>';
139 } else {
140 $site_domain = preg_replace( '|^www\.|', '', $current_network->domain );
141 echo '<div class="wp-signup-blogname"><input name="blogname" type="text" id="blogname" value="' . esc_attr( $blogname ) . '" maxlength="60" autocomplete="off" required="required" aria-describedby="' . $errmsg_blogname_aria . 'suffix-address" /><span class="suffix_address" id="suffix-address">.' . esc_html( $site_domain ) . '</span></div>';
142 }
143
144 if ( ! is_user_logged_in() ) {
145 if ( ! is_subdomain_install() ) {
146 $site = $current_network->domain . $current_network->path . __( 'sitename' );
147 } else {
148 $site = __( 'domain' ) . '.' . $site_domain . $current_network->path;
149 }
150
151 printf(
152 '<p>(<strong>%s</strong>) %s</p>',
153 /* translators: %s: Site address. */
154 sprintf( __( 'Your address will be %s.' ), $site ),
155 __( 'Must be at least 4 characters, letters and numbers only. It cannot be changed, so choose carefully!' )
156 );
157 }
158
159 // Site Title.
160 ?>
161 <label for="blog_title"><?php _e( 'Site Title:' ); ?></label>
162 <?php
163 $errmsg_blog_title = $errors->get_error_message( 'blog_title' );
164 $errmsg_blog_title_aria = '';
165 if ( $errmsg_blog_title ) {
166 $errmsg_blog_title_aria = ' aria-describedby="wp-signup-blog-title-error"';
167 echo '<p class="error" id="wp-signup-blog-title-error">' . $errmsg_blog_title . '</p>';
168 }
169 echo '<input name="blog_title" type="text" id="blog_title" value="' . esc_attr( $blog_title ) . '" required="required" autocomplete="off"' . $errmsg_blog_title_aria . ' />';
170 ?>
171
172 <?php
173 // Site Language.
174 $languages = signup_get_available_languages();
175
176 if ( ! empty( $languages ) ) :
177 ?>
178 <p>
179 <label for="site-language"><?php _e( 'Site Language:' ); ?></label>
180 <?php
181 // Network default.
182 $lang = get_site_option( 'WPLANG' );
183
184 if ( isset( $_POST['WPLANG'] ) ) {
185 $lang = $_POST['WPLANG'];
186 }
187
188 // Use US English if the default isn't available.
189 if ( ! in_array( $lang, $languages, true ) ) {
190 $lang = '';
191 }
192
193 wp_dropdown_languages(
194 array(
195 'name' => 'WPLANG',
196 'id' => 'site-language',
197 'selected' => $lang,
198 'languages' => $languages,
199 'show_available_translations' => false,
200 )
201 );
202 ?>
203 </p>
204 <?php
205 endif; // Languages.
206
207 $blog_public_on_checked = '';
208 $blog_public_off_checked = '';
209 if ( isset( $_POST['blog_public'] ) && '0' === $_POST['blog_public'] ) {
210 $blog_public_off_checked = 'checked="checked"';
211 } else {
212 $blog_public_on_checked = 'checked="checked"';
213 }
214 ?>
215
216 <div id="privacy">
217 <fieldset class="privacy-intro">
218 <legend>
219 <span class="label-heading"><?php _e( 'Privacy:' ); ?></span>
220 <?php _e( 'Allow search engines to index this site.' ); ?>
221 </legend>
222 <p class="wp-signup-radio-buttons">
223 <span class="wp-signup-radio-button">
224 <input type="radio" id="blog_public_on" name="blog_public" value="1" <?php echo $blog_public_on_checked; ?> />
225 <label class="checkbox" for="blog_public_on"><?php _e( 'Yes' ); ?></label>
226 </span>
227 <span class="wp-signup-radio-button">
228 <input type="radio" id="blog_public_off" name="blog_public" value="0" <?php echo $blog_public_off_checked; ?> />
229 <label class="checkbox" for="blog_public_off"><?php _e( 'No' ); ?></label>
230 </span>
231 </p>
232 </fieldset>
233 </div>
234
235 <?php
236 /**
237 * Fires after the site sign-up form.
238 *
239 * @since 3.0.0
240 *
241 * @param WP_Error $errors A WP_Error object possibly containing 'blogname' or 'blog_title' errors.
242 */
243 do_action( 'signup_blogform', $errors );
244}
245
246/**
247 * Validates the new site sign-up.
248 *
249 * @since MU (3.0.0)
250 *
251 * @return array Contains the new site data and error messages.
252 * See wpmu_validate_blog_signup() for details.
253 */
254function validate_blog_form() {
255 $user = '';
256 if ( is_user_logged_in() ) {
257 $user = wp_get_current_user();
258 }
259
260 return wpmu_validate_blog_signup( $_POST['blogname'], $_POST['blog_title'], $user );
261}
262
263/**
264 * Displays the fields for the new user account registration form.
265 *
266 * @since MU (3.0.0)
267 *
268 * @param string $user_name The entered username.
269 * @param string $user_email The entered email address.
270 * @param WP_Error|string $errors A WP_Error object containing existing errors. Defaults to empty string.
271 */
272function show_user_form( $user_name = '', $user_email = '', $errors = '' ) {
273 if ( ! is_wp_error( $errors ) ) {
274 $errors = new WP_Error();
275 }
276
277 // Username.
278 echo '<label for="user_name">' . __( 'Username:' ) . '</label>';
279 $errmsg_username = $errors->get_error_message( 'user_name' );
280 $errmsg_username_aria = '';
281 if ( $errmsg_username ) {
282 $errmsg_username_aria = 'wp-signup-username-error ';
283 echo '<p class="error" id="wp-signup-username-error">' . $errmsg_username . '</p>';
284 }
285 ?>
286 <input name="user_name" type="text" id="user_name" value="<?php echo esc_attr( $user_name ); ?>" autocapitalize="none" autocorrect="off" maxlength="60" autocomplete="username" required="required" aria-describedby="<?php echo $errmsg_username_aria; ?>wp-signup-username-description" />
287 <p id="wp-signup-username-description"><?php _e( '(Must be at least 4 characters, lowercase letters and numbers only.)' ); ?></p>
288
289 <?php
290 // Email address.
291 echo '<label for="user_email">' . __( 'Email&nbsp;Address:' ) . '</label>';
292 $errmsg_email = $errors->get_error_message( 'user_email' );
293 $errmsg_email_aria = '';
294 if ( $errmsg_email ) {
295 $errmsg_email_aria = 'wp-signup-email-error ';
296 echo '<p class="error" id="wp-signup-email-error">' . $errmsg_email . '</p>';
297 }
298 ?>
299 <input name="user_email" type="email" id="user_email" value="<?php echo esc_attr( $user_email ); ?>" maxlength="200" autocomplete="email" required="required" aria-describedby="<?php echo $errmsg_email_aria; ?>wp-signup-email-description" />
300 <p id="wp-signup-email-description"><?php _e( 'Your registration email is sent to this address. (Double-check your email address before continuing.)' ); ?></p>
301
302 <?php
303 // Extra fields.
304 $errmsg_generic = $errors->get_error_message( 'generic' );
305 if ( $errmsg_generic ) {
306 echo '<p class="error" id="wp-signup-generic-error">' . $errmsg_generic . '</p>';
307 }
308 /**
309 * Fires at the end of the new user account registration form.
310 *
311 * @since 3.0.0
312 *
313 * @param WP_Error $errors A WP_Error object containing 'user_name' or 'user_email' errors.
314 */
315 do_action( 'signup_extra_fields', $errors );
316}
317
318/**
319 * Validates user sign-up name and email.
320 *
321 * @since MU (3.0.0)
322 *
323 * @return array Contains username, email, and error messages.
324 * See wpmu_validate_user_signup() for details.
325 */
326function validate_user_form() {
327 return wpmu_validate_user_signup( $_POST['user_name'], $_POST['user_email'] );
328}
329
330/**
331 * Shows a form for returning users to sign up for another site.
332 *
333 * @since MU (3.0.0)
334 *
335 * @param string $blogname The new site name
336 * @param string $blog_title The new site title.
337 * @param WP_Error|string $errors A WP_Error object containing existing errors. Defaults to empty string.
338 */
339function signup_another_blog( $blogname = '', $blog_title = '', $errors = '' ) {
340 $current_user = wp_get_current_user();
341
342 if ( ! is_wp_error( $errors ) ) {
343 $errors = new WP_Error();
344 }
345
346 $signup_defaults = array(
347 'blogname' => $blogname,
348 'blog_title' => $blog_title,
349 'errors' => $errors,
350 );
351
352 /**
353 * Filters the default site sign-up variables.
354 *
355 * @since 3.0.0
356 *
357 * @param array $signup_defaults {
358 * An array of default site sign-up variables.
359 *
360 * @type string $blogname The site blogname.
361 * @type string $blog_title The site title.
362 * @type WP_Error $errors A WP_Error object possibly containing 'blogname' or 'blog_title' errors.
363 * }
364 */
365 $filtered_results = apply_filters( 'signup_another_blog_init', $signup_defaults );
366
367 $blogname = $filtered_results['blogname'];
368 $blog_title = $filtered_results['blog_title'];
369 $errors = $filtered_results['errors'];
370
371 /* translators: %s: Network title. */
372 echo '<h2>' . sprintf( __( 'Get <em>another</em> %s site in seconds' ), get_network()->site_name ) . '</h2>';
373
374 if ( $errors->has_errors() ) {
375 echo '<p>' . __( 'There was a problem, please correct the form below and try again.' ) . '</p>';
376 }
377 ?>
378 <p>
379 <?php
380 printf(
381 /* translators: %s: Current user's display name. */
382 __( '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&#8217;s content, but write responsibly!' ),
383 $current_user->display_name
384 );
385 ?>
386 </p>
387
388 <?php
389 $blogs = get_blogs_of_user( $current_user->ID );
390 if ( ! empty( $blogs ) ) {
391 ?>
392
393 <p><?php _e( 'Sites you are already a member of:' ); ?></p>
394 <ul>
395 <?php
396 foreach ( $blogs as $blog ) {
397 $home_url = get_home_url( $blog->userblog_id );
398 echo '<li><a href="' . esc_url( $home_url ) . '">' . $home_url . '</a></li>';
399 }
400 ?>
401 </ul>
402 <?php } ?>
403
404 <p><?php _e( 'If you are not going to use a great site domain, leave it for a new user. Now have at it!' ); ?></p>
405 <form id="setupform" method="post" action="wp-signup.php">
406 <input type="hidden" name="stage" value="gimmeanotherblog" />
407 <?php
408 /**
409 * Fires when hidden sign-up form fields output when creating another site or user.
410 *
411 * @since MU (3.0.0)
412 *
413 * @param string $context A string describing the steps of the sign-up process. The value can be
414 * 'create-another-site', 'validate-user', or 'validate-site'.
415 */
416 do_action( 'signup_hidden_fields', 'create-another-site' );
417 ?>
418 <?php show_blog_form( $blogname, $blog_title, $errors ); ?>
419 <p class="submit"><input type="submit" name="submit" class="submit" value="<?php esc_attr_e( 'Create Site' ); ?>" /></p>
420 </form>
421 <?php
422}
423
424/**
425 * Validates a new site sign-up for an existing user.
426 *
427 * @since MU (3.0.0)
428 *
429 * @global string $blogname The new site's subdomain or directory name.
430 * @global string $blog_title The new site's title.
431 * @global WP_Error $errors Existing errors in the global scope.
432 * @global string $domain The new site's domain.
433 * @global string $path The new site's path.
434 *
435 * @return null|bool True if site signup was validated, false on error.
436 * The function halts all execution if the user is not logged in.
437 */
438function validate_another_blog_signup() {
439 global $blogname, $blog_title, $errors, $domain, $path;
440 $current_user = wp_get_current_user();
441 if ( ! is_user_logged_in() ) {
442 die();
443 }
444
445 $result = validate_blog_form();
446
447 // Extracted values set/overwrite globals.
448 $domain = $result['domain'];
449 $path = $result['path'];
450 $blogname = $result['blogname'];
451 $blog_title = $result['blog_title'];
452 $errors = $result['errors'];
453
454 if ( $errors->has_errors() ) {
455 signup_another_blog( $blogname, $blog_title, $errors );
456 return false;
457 }
458
459 $public = (int) $_POST['blog_public'];
460
461 $blog_meta_defaults = array(
462 'lang_id' => 1,
463 'public' => $public,
464 );
465
466 // Handle the language setting for the new site.
467 if ( ! empty( $_POST['WPLANG'] ) ) {
468
469 $languages = signup_get_available_languages();
470
471 if ( in_array( $_POST['WPLANG'], $languages, true ) ) {
472 $language = wp_unslash( sanitize_text_field( $_POST['WPLANG'] ) );
473
474 if ( $language ) {
475 $blog_meta_defaults['WPLANG'] = $language;
476 }
477 }
478 }
479
480 /**
481 * Filters the new site meta variables.
482 *
483 * Use the {@see 'add_signup_meta'} filter instead.
484 *
485 * @since MU (3.0.0)
486 * @deprecated 3.0.0 Use the {@see 'add_signup_meta'} filter instead.
487 *
488 * @param array $blog_meta_defaults An array of default blog meta variables.
489 */
490 $meta_defaults = apply_filters_deprecated( 'signup_create_blog_meta', array( $blog_meta_defaults ), '3.0.0', 'add_signup_meta' );
491
492 /**
493 * Filters the new default site meta variables.
494 *
495 * @since 3.0.0
496 *
497 * @param array $meta {
498 * An array of default site meta variables.
499 *
500 * @type int $lang_id The language ID.
501 * @type int $blog_public Whether search engines should be discouraged from indexing the site. 1 for true, 0 for false.
502 * }
503 */
504 $meta = apply_filters( 'add_signup_meta', $meta_defaults );
505
506 $blog_id = wpmu_create_blog( $domain, $path, $blog_title, $current_user->ID, $meta, get_current_network_id() );
507
508 if ( is_wp_error( $blog_id ) ) {
509 return false;
510 }
511
512 confirm_another_blog_signup( $domain, $path, $blog_title, $current_user->user_login, $current_user->user_email, $meta, $blog_id );
513 return true;
514}
515
516/**
517 * Shows a message confirming that the new site has been created.
518 *
519 * @since MU (3.0.0)
520 * @since 4.4.0 Added the `$blog_id` parameter.
521 *
522 * @param string $domain The domain URL.
523 * @param string $path The site root path.
524 * @param string $blog_title The site title.
525 * @param string $user_name The username.
526 * @param string $user_email The user's email address.
527 * @param array $meta Any additional meta from the {@see 'add_signup_meta'} filter in validate_blog_signup().
528 * @param int $blog_id The site ID.
529 */
530function confirm_another_blog_signup( $domain, $path, $blog_title, $user_name, $user_email = '', $meta = array(), $blog_id = 0 ) {
531
532 if ( $blog_id ) {
533 switch_to_blog( $blog_id );
534 $home_url = home_url( '/' );
535 $login_url = wp_login_url();
536 restore_current_blog();
537 } else {
538 $home_url = 'http://' . $domain . $path;
539 $login_url = 'http://' . $domain . $path . 'wp-login.php';
540 }
541
542 $site = sprintf(
543 '<a href="%1$s">%2$s</a>',
544 esc_url( $home_url ),
545 $blog_title
546 );
547
548 ?>
549 <h2>
550 <?php
551 /* translators: %s: Site title. */
552 printf( __( 'The site %s is yours.' ), $site );
553 ?>
554 </h2>
555 <p>
556 <?php
557 printf(
558 /* translators: 1: Link to new site, 2: Login URL, 3: Username. */
559 __( '%1$s is your new site. <a href="%2$s">Log in</a> as &#8220;%3$s&#8221; using your existing password.' ),
560 sprintf(
561 '<a href="%s">%s</a>',
562 esc_url( $home_url ),
563 untrailingslashit( $domain . $path )
564 ),
565 esc_url( $login_url ),
566 $user_name
567 );
568 ?>
569 </p>
570 <?php
571 /**
572 * Fires when the site or user sign-up process is complete.
573 *
574 * @since 3.0.0
575 */
576 do_action( 'signup_finished' );
577}
578
579/**
580 * Shows a form for a visitor to sign up for a new user account.
581 *
582 * @since MU (3.0.0)
583 *
584 * @global string $active_signup String that returns registration type. The value can be
585 * 'all', 'none', 'blog', or 'user'.
586 *
587 * @param string $user_name The username.
588 * @param string $user_email The user's email.
589 * @param WP_Error|string $errors A WP_Error object containing existing errors. Defaults to empty string.
590 */
591function signup_user( $user_name = '', $user_email = '', $errors = '' ) {
592 global $active_signup;
593
594 if ( ! is_wp_error( $errors ) ) {
595 $errors = new WP_Error();
596 }
597
598 $signup_for = isset( $_POST['signup_for'] ) ? esc_html( $_POST['signup_for'] ) : 'blog';
599
600 $signup_user_defaults = array(
601 'user_name' => $user_name,
602 'user_email' => $user_email,
603 'errors' => $errors,
604 );
605
606 /**
607 * Filters the default user variables used on the user sign-up form.
608 *
609 * @since 3.0.0
610 *
611 * @param array $signup_user_defaults {
612 * An array of default user variables.
613 *
614 * @type string $user_name The user username.
615 * @type string $user_email The user email address.
616 * @type WP_Error $errors A WP_Error object with possible errors relevant to the sign-up user.
617 * }
618 */
619 $filtered_results = apply_filters( 'signup_user_init', $signup_user_defaults );
620 $user_name = $filtered_results['user_name'];
621 $user_email = $filtered_results['user_email'];
622 $errors = $filtered_results['errors'];
623
624 ?>
625
626 <h2>
627 <?php
628 /* translators: %s: Name of the network. */
629 printf( __( 'Get your own %s account in seconds' ), get_network()->site_name );
630 ?>
631 </h2>
632 <form id="setupform" method="post" action="wp-signup.php" novalidate="novalidate">
633 <input type="hidden" name="stage" value="validate-user-signup" />
634 <?php
635 /** This action is documented in wp-signup.php */
636 do_action( 'signup_hidden_fields', 'validate-user' );
637 ?>
638 <?php show_user_form( $user_name, $user_email, $errors ); ?>
639
640 <?php if ( 'blog' === $active_signup ) : ?>
641 <input id="signupblog" type="hidden" name="signup_for" value="blog" />
642 <?php elseif ( 'user' === $active_signup ) : ?>
643 <input id="signupblog" type="hidden" name="signup_for" value="user" />
644 <?php else : ?>
645 <fieldset class="signup-options">
646 <legend><?php _e( 'Create a site or only a username:' ); ?></legend>
647 <p class="wp-signup-radio-buttons">
648 <span class="wp-signup-radio-button">
649 <input id="signupblog" type="radio" name="signup_for" value="blog" <?php checked( $signup_for, 'blog' ); ?> />
650 <label class="checkbox" for="signupblog"><?php _e( 'Gimme a site!' ); ?></label>
651 </span>
652 <span class="wp-signup-radio-button">
653 <input id="signupuser" type="radio" name="signup_for" value="user" <?php checked( $signup_for, 'user' ); ?> />
654 <label class="checkbox" for="signupuser"><?php _e( 'Just a username, please.' ); ?></label>
655 </span>
656 </p>
657 </fieldset>
658 <?php endif; ?>
659
660 <p class="submit"><input type="submit" name="submit" class="submit" value="<?php esc_attr_e( 'Next' ); ?>" /></p>
661 </form>
662 <?php
663}
664
665/**
666 * Validates the new user sign-up.
667 *
668 * @since MU (3.0.0)
669 *
670 * @return bool True if new user sign-up was validated, false on error.
671 */
672function validate_user_signup() {
673 $result = validate_user_form();
674 $user_name = $result['user_name'];
675 $user_email = $result['user_email'];
676 $errors = $result['errors'];
677
678 if ( $errors->has_errors() ) {
679 signup_user( $user_name, $user_email, $errors );
680 return false;
681 }
682
683 if ( 'blog' === $_POST['signup_for'] ) {
684 signup_blog( $user_name, $user_email );
685 return false;
686 }
687
688 /** This filter is documented in wp-signup.php */
689 wpmu_signup_user( $user_name, $user_email, apply_filters( 'add_signup_meta', array() ) );
690
691 confirm_user_signup( $user_name, $user_email );
692 return true;
693}
694
695/**
696 * Shows a message confirming that the new user has been registered and is awaiting activation.
697 *
698 * @since MU (3.0.0)
699 *
700 * @param string $user_name The username.
701 * @param string $user_email The user's email address.
702 */
703function confirm_user_signup( $user_name, $user_email ) {
704 ?>
705 <h2>
706 <?php
707 /* translators: %s: Username. */
708 printf( __( '%s is your new username' ), $user_name )
709 ?>
710 </h2>
711 <p><?php _e( 'But, before you can start using your new username, <strong>you must activate it</strong>.' ); ?></p>
712 <p>
713 <?php
714 /* translators: %s: The user email address. */
715 printf( __( 'Check your inbox at %s and click on the given link.' ), '<strong>' . $user_email . '</strong>' );
716 ?>
717 </p>
718 <p><?php _e( 'If you do not activate your username within two days, you will have to sign up again.' ); ?></p>
719 <?php
720 /** This action is documented in wp-signup.php */
721 do_action( 'signup_finished' );
722}
723
724/**
725 * Shows a form for a user or visitor to sign up for a new site.
726 *
727 * @since MU (3.0.0)
728 *
729 * @param string $user_name The username.
730 * @param string $user_email The user's email address.
731 * @param string $blogname The site name.
732 * @param string $blog_title The site title.
733 * @param WP_Error|string $errors A WP_Error object containing existing errors. Defaults to empty string.
734 */
735function signup_blog( $user_name = '', $user_email = '', $blogname = '', $blog_title = '', $errors = '' ) {
736 if ( ! is_wp_error( $errors ) ) {
737 $errors = new WP_Error();
738 }
739
740 $signup_blog_defaults = array(
741 'user_name' => $user_name,
742 'user_email' => $user_email,
743 'blogname' => $blogname,
744 'blog_title' => $blog_title,
745 'errors' => $errors,
746 );
747
748 /**
749 * Filters the default site creation variables for the site sign-up form.
750 *
751 * @since 3.0.0
752 *
753 * @param array $signup_blog_defaults {
754 * An array of default site creation variables.
755 *
756 * @type string $user_name The user username.
757 * @type string $user_email The user email address.
758 * @type string $blogname The blogname.
759 * @type string $blog_title The title of the site.
760 * @type WP_Error $errors A WP_Error object with possible errors relevant to new site creation variables.
761 * }
762 */
763 $filtered_results = apply_filters( 'signup_blog_init', $signup_blog_defaults );
764
765 $user_name = $filtered_results['user_name'];
766 $user_email = $filtered_results['user_email'];
767 $blogname = $filtered_results['blogname'];
768 $blog_title = $filtered_results['blog_title'];
769 $errors = $filtered_results['errors'];
770
771 if ( empty( $blogname ) ) {
772 $blogname = $user_name;
773 }
774 ?>
775 <form id="setupform" method="post" action="wp-signup.php">
776 <input type="hidden" name="stage" value="validate-blog-signup" />
777 <input type="hidden" name="user_name" value="<?php echo esc_attr( $user_name ); ?>" />
778 <input type="hidden" name="user_email" value="<?php echo esc_attr( $user_email ); ?>" />
779 <?php
780 /** This action is documented in wp-signup.php */
781 do_action( 'signup_hidden_fields', 'validate-site' );
782 ?>
783 <?php show_blog_form( $blogname, $blog_title, $errors ); ?>
784 <p class="submit"><input type="submit" name="submit" class="submit" value="<?php esc_attr_e( 'Sign up' ); ?>" /></p>
785 </form>
786 <?php
787}
788
789/**
790 * Validates new site signup.
791 *
792 * @since MU (3.0.0)
793 *
794 * @return bool True if the site sign-up was validated, false on error.
795 */
796function validate_blog_signup() {
797 // Re-validate user info.
798 $user_result = wpmu_validate_user_signup( $_POST['user_name'], $_POST['user_email'] );
799 $user_name = $user_result['user_name'];
800 $user_email = $user_result['user_email'];
801 $user_errors = $user_result['errors'];
802
803 if ( $user_errors->has_errors() ) {
804 signup_user( $user_name, $user_email, $user_errors );
805 return false;
806 }
807
808 $result = wpmu_validate_blog_signup( $_POST['blogname'], $_POST['blog_title'] );
809 $domain = $result['domain'];
810 $path = $result['path'];
811 $blogname = $result['blogname'];
812 $blog_title = $result['blog_title'];
813 $errors = $result['errors'];
814
815 if ( $errors->has_errors() ) {
816 signup_blog( $user_name, $user_email, $blogname, $blog_title, $errors );
817 return false;
818 }
819
820 $public = (int) $_POST['blog_public'];
821 $signup_meta = array(
822 'lang_id' => 1,
823 'public' => $public,
824 );
825
826 // Handle the language setting for the new site.
827 if ( ! empty( $_POST['WPLANG'] ) ) {
828
829 $languages = signup_get_available_languages();
830
831 if ( in_array( $_POST['WPLANG'], $languages, true ) ) {
832 $language = wp_unslash( sanitize_text_field( $_POST['WPLANG'] ) );
833
834 if ( $language ) {
835 $signup_meta['WPLANG'] = $language;
836 }
837 }
838 }
839
840 /** This filter is documented in wp-signup.php */
841 $meta = apply_filters( 'add_signup_meta', $signup_meta );
842
843 wpmu_signup_blog( $domain, $path, $blog_title, $user_name, $user_email, $meta );
844 confirm_blog_signup( $domain, $path, $blog_title, $user_name, $user_email, $meta );
845 return true;
846}
847
848/**
849 * Shows a message confirming that the new site has been registered and is awaiting activation.
850 *
851 * @since MU (3.0.0)
852 *
853 * @param string $domain The domain or subdomain of the site.
854 * @param string $path The path of the site.
855 * @param string $blog_title The title of the new site.
856 * @param string $user_name The user's username.
857 * @param string $user_email The user's email address.
858 * @param array $meta Any additional meta from the {@see 'add_signup_meta'} filter in validate_blog_signup().
859 */
860function confirm_blog_signup( $domain, $path, $blog_title, $user_name = '', $user_email = '', $meta = array() ) {
861 ?>
862 <h2>
863 <?php
864 /* translators: %s: Site address. */
865 printf( __( 'Congratulations! Your new site, %s, is almost ready.' ), "<a href='http://{$domain}{$path}'>{$blog_title}</a>" )
866 ?>
867 </h2>
868
869 <p><?php _e( 'But, before you can start using your site, <strong>you must activate it</strong>.' ); ?></p>
870 <p>
871 <?php
872 /* translators: %s: The user email address. */
873 printf( __( 'Check your inbox at %s and click on the given link.' ), '<strong>' . $user_email . '</strong>' );
874 ?>
875 </p>
876 <p><?php _e( 'If you do not activate your site within two days, you will have to sign up again.' ); ?></p>
877 <h2><?php _e( 'Still waiting for your email?' ); ?></h2>
878 <p><?php _e( 'If you have not received your email yet, there are a number of things you can do:' ); ?></p>
879 <ul id="noemail-tips">
880 <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>
881 <li><p><?php _e( 'Check the junk or spam folder of your email client. Sometime emails wind up there by mistake.' ); ?></p></li>
882 <li>
883 <?php
884 /* translators: %s: Email address. */
885 printf( __( 'Have you entered your email correctly? You have entered %s, if it&#8217;s incorrect, you will not receive your email.' ), $user_email );
886 ?>
887 </li>
888 </ul>
889 <?php
890 /** This action is documented in wp-signup.php */
891 do_action( 'signup_finished' );
892}
893
894/**
895 * Retrieves languages available during the site/user sign-up process.
896 *
897 * @since 4.4.0
898 *
899 * @see get_available_languages()
900 *
901 * @return string[] Array of available language codes. Language codes are formed by
902 * stripping the .mo extension from the language file names.
903 */
904function signup_get_available_languages() {
905 /**
906 * Filters the list of available languages for front-end site sign-ups.
907 *
908 * Passing an empty array to this hook will disable output of the setting on the
909 * sign-up form, and the default language will be used when creating the site.
910 *
911 * Languages not already installed will be stripped.
912 *
913 * @since 4.4.0
914 *
915 * @param string[] $languages Array of available language codes. Language codes are formed by
916 * stripping the .mo extension from the language file names.
917 */
918 $languages = (array) apply_filters( 'signup_get_available_languages', get_available_languages() );
919
920 /*
921 * Strip any non-installed languages and return.
922 *
923 * Re-call get_available_languages() here in case a language pack was installed
924 * in a callback hooked to the 'signup_get_available_languages' filter before this point.
925 */
926 return array_intersect_assoc( $languages, get_available_languages() );
927}
928
929// Main.
930$active_signup = get_site_option( 'registration', 'none' );
931
932/**
933 * Filters the type of site sign-up.
934 *
935 * @since 3.0.0
936 *
937 * @param string $active_signup String that returns registration type. The value can be
938 * 'all', 'none', 'blog', or 'user'.
939 */
940$active_signup = apply_filters( 'wpmu_active_signup', $active_signup );
941
942if ( current_user_can( 'manage_network' ) ) {
943 echo '<div class="mu_alert">';
944 _e( 'Greetings Network Administrator!' );
945 echo ' ';
946
947 switch ( $active_signup ) {
948 case 'none':
949 _e( 'The network currently disallows registrations.' );
950 break;
951 case 'blog':
952 _e( 'The network currently allows site registrations.' );
953 break;
954 case 'user':
955 _e( 'The network currently allows user registrations.' );
956 break;
957 default:
958 _e( 'The network currently allows both site and user registrations.' );
959 break;
960 }
961
962 echo ' ';
963
964 /* translators: %s: URL to Network Settings screen. */
965 printf( __( 'To change or disable registration go to your <a href="%s">Options page</a>.' ), esc_url( network_admin_url( 'settings.php' ) ) );
966 echo '</div>';
967}
968
969$newblogname = isset( $_GET['new'] ) ? strtolower( preg_replace( '/^-|-$|[^-a-zA-Z0-9]/', '', $_GET['new'] ) ) : null;
970
971$current_user = wp_get_current_user();
972if ( 'none' === $active_signup ) {
973 _e( 'Registration has been disabled.' );
974} elseif ( 'blog' === $active_signup && ! is_user_logged_in() ) {
975 $login_url = wp_login_url( network_site_url( 'wp-signup.php' ) );
976 /* translators: %s: Login URL. */
977 printf( __( 'You must first <a href="%s">log in</a>, and then you can create a new site.' ), $login_url );
978} else {
979 $stage = isset( $_POST['stage'] ) ? $_POST['stage'] : 'default';
980 switch ( $stage ) {
981 case 'validate-user-signup':
982 if ( 'all' === $active_signup
983 || ( 'blog' === $_POST['signup_for'] && 'blog' === $active_signup )
984 || ( 'user' === $_POST['signup_for'] && 'user' === $active_signup )
985 ) {
986 validate_user_signup();
987 } else {
988 _e( 'User registration has been disabled.' );
989 }
990 break;
991 case 'validate-blog-signup':
992 if ( 'all' === $active_signup || 'blog' === $active_signup ) {
993 validate_blog_signup();
994 } else {
995 _e( 'Site registration has been disabled.' );
996 }
997 break;
998 case 'gimmeanotherblog':
999 validate_another_blog_signup();
1000 break;
1001 case 'default':
1002 default:
1003 $user_email = isset( $_POST['user_email'] ) ? $_POST['user_email'] : '';
1004 /**
1005 * Fires when the site sign-up form is sent.
1006 *
1007 * @since 3.0.0
1008 */
1009 do_action( 'preprocess_signup_form' );
1010 if ( is_user_logged_in() && ( 'all' === $active_signup || 'blog' === $active_signup ) ) {
1011 signup_another_blog( $newblogname );
1012 } elseif ( ! is_user_logged_in() && ( 'all' === $active_signup || 'user' === $active_signup ) ) {
1013 signup_user( $newblogname, $user_email );
1014 } elseif ( ! is_user_logged_in() && ( 'blog' === $active_signup ) ) {
1015 _e( 'Sorry, new registrations are not allowed at this time.' );
1016 } else {
1017 _e( 'You are logged in already. No need to register again!' );
1018 }
1019
1020 if ( $newblogname ) {
1021 $newblog = get_blogaddress_by_name( $newblogname );
1022
1023 if ( 'blog' === $active_signup || 'all' === $active_signup ) {
1024 printf(
1025 /* translators: %s: Site address. */
1026 '<p>' . __( 'The site you were looking for, %s, does not exist, but you can create it now!' ) . '</p>',
1027 '<strong>' . $newblog . '</strong>'
1028 );
1029 } else {
1030 printf(
1031 /* translators: %s: Site address. */
1032 '<p>' . __( 'The site you were looking for, %s, does not exist.' ) . '</p>',
1033 '<strong>' . $newblog . '</strong>'
1034 );
1035 }
1036 }
1037 break;
1038 }
1039}
1040?>
1041</div>
1042</div>
1043<?php
1044/**
1045 * Fires after the sign-up forms, before wp_footer.
1046 *
1047 * @since 3.0.0
1048 */
1049do_action( 'after_signup_form' );
1050?>
1051
1052<?php
1053get_footer( 'wp-signup' );
1054
Shop – Teachers Night Out

Shop

Custom T-Shirts

Create your own personalized T-shirts with Cardgames4Educators! Our custom T-shirts are made with high-quality materials, offering vibrant prints that last. Perfect for classrooms, events, or as a unique gift!

Custom T-Shirts Line Dancing Red

Step onto the dance floor in style with Cardgames4Educators’ Custom Line Dancing Red T-Shirts! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts Line Dancing Yellow Golden

Step onto the dance floor in style with Cardgames4Educators’ Custom Line Dancing Yellow Golden T-Shirts! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts Line Dancing White

Step onto the dance floor in style with Cardgames4Educators’ Custom Line Dancing White T-Shirts! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts Line Dancing Green

Step onto the dance floor in style with Cardgames4Educators’ Custom Line Dancing Green T-Shirts! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts White Line Dance

Step onto the dance floor in style with Cardgames4Educators’ Custom Line Dancing White T-Shirts! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts White Light Heart Line Dance

Step onto the dance floor in style with Cardgames4Educators’ Custom T-Shirts White Light Heart Line Dance! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts White & Pink Light Heart Line Dance

Step onto the dance floor in style with Cardgames4Educators’ Custom T-Shirts White & Pink Light Heart Line Dance! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts White & Red Light Heart Line Dance

Step onto the dance floor in style with Cardgames4Educators’ Custom T-Shirts White & Red Light Heart Line Dance! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts Black Line Dance

Step onto the dance floor in style with Cardgames4Educators’ Custom T-Shirts Black Line Dance! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts Black & White Light Heart Line Dance

Step onto the dance floor in style with Cardgames4Educators’ Custom T-Shirts Black & White Light Heart Line Dance! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts Black & Red Light Heart Line Dance

Step onto the dance floor in style with Cardgames4Educators’ Custom T-Shirts Black & Red Light Heart Line Dance! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts White & Black Eat Line Dance

Step onto the dance floor in style with Cardgames4Educators’ Custom T-Shirts White & Black Eat Line Dance! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts White & Green Eat Line Dance

Step onto the dance floor in style with Cardgames4Educators’ Custom T-Shirts White & Green Eat Line Dance! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts White & Blue Eat Line Dance

Step onto the dance floor in style with Cardgames4Educators’ Custom T-Shirts White & Blue Eat Line Dance! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts White & Red Eat Line Dance

Step onto the dance floor in style with Cardgames4Educators’ Custom T-Shirts White & Red Eat Line Dance! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts Black & White Eat Line Dance

Step onto the dance floor in style with Cardgames4Educators’ Custom T-Shirts Black & White Eat Line Dance! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Custom T-Shirts Black & Black Eat Line Dance

Step onto the dance floor in style with Cardgames4Educators’ Custom T-Shirts Black & Black Eat Line Dance! Made from high-quality fabric and featuring bold, vibrant prints, these shirts are perfect for dance events, group performances, or casual wear. Show off your passion for line dancing with a look that’s both comfortable and eye-catching!

Teachers Night Out Card Game

ICE Breaker Special Edition

The special edition, the icebreaker edition has fewer cards that are to be played at work.

Box Includes directions, cards, and information sheet.

Teachers Night Out Card Game

Standard Version

We've combined the everyday highs and lows of being an educator into a hilarious and engaging card game that you and your colleagues will love. Whether you're dealing with the chaos of a classroom, the triumphs of student success, or the quirky moments that only teachers experience, this game captures it all.

The regular box is to be played amongst teachers after work possibly while reflecting on the ups and downs of the school year.

Box Includes directions, cards, and information sheet.

UV DTF Decals

We offer high-quality, vibrant designs perfect for educators, classrooms, and everyday use. Whether you're decorating mugs, tumblers, journals, laptops, or adding a fun touch to your space, our decals are durable, easy to apply, and made to stand out. With a variety of educational and creative designs, there's something for everyone! 

Get in Touch

© 2024 Teachers Night Out. All Rights Reserved.