Title: network_step1
Published: April 25, 2014
Last modified: February 24, 2026

---

# network_step1( false|WP_Error $errors = false )

## In this article

 * [Parameters](https://developer.wordpress.org/reference/functions/network_step1/?output_format=md#parameters)
 * [Source](https://developer.wordpress.org/reference/functions/network_step1/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/functions/network_step1/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/functions/network_step1/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/functions/network_step1/?output_format=md#wp--skip-link--target)

Prints step 1 for Network installation process.

## 󠀁[Parameters](https://developer.wordpress.org/reference/functions/network_step1/?output_format=md#parameters)󠁿

 `$errors`false|[WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)
optional

Error object.

Default:`false`

## 󠀁[Source](https://developer.wordpress.org/reference/functions/network_step1/?output_format=md#source)󠁿

    ```php
    function network_step1( $errors = false ) {
    	global $is_apache;

    	if ( defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) {
    		$cannot_define_constant_message  = '<strong>' . __( 'Error:' ) . '</strong> ';
    		$cannot_define_constant_message .= sprintf(
    			/* translators: %s: DO_NOT_UPGRADE_GLOBAL_TABLES */
    			__( 'The constant %s cannot be defined when creating a network.' ),
    			'<code>DO_NOT_UPGRADE_GLOBAL_TABLES</code>'
    		);

    		wp_admin_notice(
    			$cannot_define_constant_message,
    			array(
    				'additional_classes' => array( 'error' ),
    			)
    		);

    		echo '</div>';
    		require_once ABSPATH . 'wp-admin/admin-footer.php';
    		die();
    	}

    	$active_plugins = get_option( 'active_plugins' );
    	if ( ! empty( $active_plugins ) ) {
    		wp_admin_notice(
    			'<strong>' . __( 'Warning:' ) . '</strong> ' . sprintf(
    				/* translators: %s: URL to Plugins screen. */
    				__( 'Please <a href="%s">deactivate your plugins</a> before enabling the Network feature.' ),
    				admin_url( 'plugins.php?plugin_status=active' )
    			),
    			array( 'type' => 'warning' )
    		);
    		echo '<p>' . __( 'Once the network is created, you may reactivate your plugins.' ) . '</p>';
    		echo '</div>';
    		require_once ABSPATH . 'wp-admin/admin-footer.php';
    		die();
    	}

    	// Strip standard port from hostname.
    	$hostname = preg_replace( '/(?::80|:443)$/', '', get_clean_basedomain() );

    	echo '<form method="post">';

    	wp_nonce_field( 'install-network-1' );

    	$error_codes = array();
    	if ( is_wp_error( $errors ) ) {
    		$network_created_error_message = '<p><strong>' . __( 'Error:' ) . '</strong> ' . __( 'The network could not be created.' ) . '</p>';
    		foreach ( $errors->get_error_messages() as $error ) {
    			$network_created_error_message .= "<p>$error</p>";
    		}
    		wp_admin_notice(
    			$network_created_error_message,
    			array(
    				'additional_classes' => array( 'error' ),
    				'paragraph_wrap'     => false,
    			)
    		);
    		$error_codes = $errors->get_error_codes();
    	}

    	if ( ! empty( $_POST['sitename'] ) && ! in_array( 'empty_sitename', $error_codes, true ) ) {
    		$site_name = $_POST['sitename'];
    	} else {
    		/* translators: %s: Default network title. */
    		$site_name = sprintf( __( '%s Sites' ), get_option( 'blogname' ) );
    	}

    	if ( ! empty( $_POST['email'] ) && ! in_array( 'invalid_email', $error_codes, true ) ) {
    		$admin_email = $_POST['email'];
    	} else {
    		$admin_email = get_option( 'admin_email' );
    	}
    	?>
    	<p><?php _e( 'Welcome to the Network installation process!' ); ?></p>
    	<p><?php _e( 'Fill in the information below and you&#8217;ll be on your way to creating a network of WordPress sites. Configuration files will be created in the next step.' ); ?></p>
    	<?php

    	if ( isset( $_POST['subdomain_install'] ) ) {
    		$subdomain_install = (bool) $_POST['subdomain_install'];
    	} elseif ( apache_mod_loaded( 'mod_rewrite' ) ) { // Assume nothing.
    		$subdomain_install = true;
    	} elseif ( ! allow_subdirectory_install() ) {
    		$subdomain_install = true;
    	} else {
    		$subdomain_install = false;
    		$got_mod_rewrite   = got_mod_rewrite();
    		if ( $got_mod_rewrite ) { // Dangerous assumptions.
    			$message_class = 'updated';
    			$message       = '<p><strong>' . __( 'Warning:' ) . '</strong> ';
    			$message      .= '<p>' . sprintf(
    				/* translators: %s: mod_rewrite */
    				__( 'Please make sure the Apache %s module is installed as it will be used at the end of this installation.' ),
    				'<code>mod_rewrite</code>'
    			) . '</p>';
    		} elseif ( $is_apache ) {
    			$message_class = 'error';
    			$message       = '<p><strong>' . __( 'Warning:' ) . '</strong> ';
    			$message      .= sprintf(
    				/* translators: %s: mod_rewrite */
    				__( 'It looks like the Apache %s module is not installed.' ),
    				'<code>mod_rewrite</code>'
    			) . '</p>';
    		}

    		if ( $got_mod_rewrite || $is_apache ) { // Protect against mod_rewrite mimicry (but ! Apache).
    			$message .= '<p>' . sprintf(
    				/* translators: 1: mod_rewrite, 2: mod_rewrite documentation URL, 3: Google search for mod_rewrite. */
    				__( 'If %1$s is disabled, ask your administrator to enable that module, or look at the <a href="%2$s">Apache documentation</a> or <a href="%3$s">elsewhere</a> for help setting it up.' ),
    				'<code>mod_rewrite</code>',
    				'https://httpd.apache.org/docs/mod/mod_rewrite.html',
    				'https://www.google.com/search?q=apache+mod_rewrite'
    			) . '</p>';

    			wp_admin_notice(
    				$message,
    				array(
    					'additional_classes' => array( $message_class, 'inline' ),
    					'paragraph_wrap'     => false,
    				)
    			);
    		}
    	}

    	if ( allow_subdomain_install() && allow_subdirectory_install() ) :
    		?>
    		<h3><?php esc_html_e( 'Addresses of Sites in your Network' ); ?></h3>
    		<p><?php _e( 'Please choose whether you would like sites in your WordPress network to use sub-domains or sub-directories.' ); ?>
    			<strong><?php _e( 'You cannot change this later.' ); ?></strong></p>
    		<p><?php _e( 'You will need a wildcard DNS record if you are going to use the virtual host (sub-domain) functionality.' ); ?></p>
    		<?php // @todo Link to an MS readme? ?>
    		<table class="form-table" role="presentation">
    			<tr>
    				<th><label><input type="radio" name="subdomain_install" value="1"<?php checked( $subdomain_install ); ?> /> <?php _e( 'Sub-domains' ); ?></label></th>
    				<td>
    				<?php
    				printf(
    					/* translators: 1: Host name. */
    					_x( 'like <code>site1.%1$s</code> and <code>site2.%1$s</code>', 'subdomain examples' ),
    					$hostname
    				);
    				?>
    				</td>
    			</tr>
    			<tr>
    				<th><label><input type="radio" name="subdomain_install" value="0"<?php checked( ! $subdomain_install ); ?> /> <?php _e( 'Sub-directories' ); ?></label></th>
    				<td>
    				<?php
    				printf(
    					/* translators: 1: Host name. */
    					_x( 'like <code>%1$s/site1</code> and <code>%1$s/site2</code>', 'subdirectory examples' ),
    					$hostname
    				);
    				?>
    				</td>
    			</tr>
    		</table>

    		<?php
    	endif;

    	if ( WP_CONTENT_DIR !== ABSPATH . 'wp-content' && ( allow_subdirectory_install() || ! allow_subdomain_install() ) ) {
    		$subdirectory_warning_message  = '<strong>' . __( 'Warning:' ) . '</strong> ';
    		$subdirectory_warning_message .= __( 'Subdirectory networks may not be fully compatible with custom wp-content directories.' );
    		wp_admin_notice(
    			$subdirectory_warning_message,
    			array(
    				'additional_classes' => array( 'error', 'inline' ),
    			)
    		);
    	}

    	$is_www = str_starts_with( $hostname, 'www.' );
    	if ( $is_www ) :
    		?>
    		<h3><?php esc_html_e( 'Server Address' ); ?></h3>
    		<p>
    		<?php
    		printf(
    			/* translators: 1: Site URL, 2: Host name, 3: www. */
    			__( 'You should consider changing your site domain to %1$s before enabling the network feature. It will still be possible to visit your site using the %3$s prefix with an address like %2$s but any links will not have the %3$s prefix.' ),
    			'<code>' . substr( $hostname, 4 ) . '</code>',
    			'<code>' . $hostname . '</code>',
    			'<code>www</code>'
    		);
    		?>
    		</p>
    		<table class="form-table" role="presentation">
    			<tr>
    			<th scope='row'><?php esc_html_e( 'Server Address' ); ?></th>
    			<td>
    				<?php
    					printf(
    						/* translators: %s: Host name. */
    						__( 'The internet address of your network will be %s.' ),
    						'<code>' . $hostname . '</code>'
    					);
    				?>
    				</td>
    			</tr>
    		</table>
    		<?php endif; ?>

    		<h3><?php esc_html_e( 'Network Details' ); ?></h3>
    		<table class="form-table" role="presentation">
    		<?php if ( 'localhost' === $hostname ) : ?>
    			<tr>
    				<th scope="row"><?php esc_html_e( 'Sub-directory Installation' ); ?></th>
    				<td>
    				<?php
    					printf(
    						/* translators: 1: localhost, 2: localhost.localdomain */
    						__( 'Because you are using %1$s, the sites in your WordPress network must use sub-directories. Consider using %2$s if you wish to use sub-domains.' ),
    						'<code>localhost</code>',
    						'<code>localhost.localdomain</code>'
    					);
    					// Uh oh:
    				if ( ! allow_subdirectory_install() ) {
    					echo ' <strong>' . __( 'Warning:' ) . ' ' . __( 'The main site in a sub-directory installation will need to use a modified permalink structure, potentially breaking existing links.' ) . '</strong>';
    				}
    				?>
    				</td>
    			</tr>
    		<?php elseif ( ! allow_subdomain_install() ) : ?>
    			<tr>
    				<th scope="row"><?php esc_html_e( 'Sub-directory Installation' ); ?></th>
    				<td>
    				<?php
    					_e( 'Because your installation is in a directory, the sites in your WordPress network must use sub-directories.' );
    					// Uh oh:
    				if ( ! allow_subdirectory_install() ) {
    					echo ' <strong>' . __( 'Warning:' ) . ' ' . __( 'The main site in a sub-directory installation will need to use a modified permalink structure, potentially breaking existing links.' ) . '</strong>';
    				}
    				?>
    				</td>
    			</tr>
    		<?php elseif ( ! allow_subdirectory_install() ) : ?>
    			<tr>
    				<th scope="row"><?php esc_html_e( 'Sub-domain Installation' ); ?></th>
    				<td>
    				<?php
    				_e( 'Because your installation is not new, the sites in your WordPress network must use sub-domains.' );
    					echo ' <strong>' . __( 'The main site in a sub-directory installation will need to use a modified permalink structure, potentially breaking existing links.' ) . '</strong>';
    				?>
    				</td>
    			</tr>
    		<?php endif; ?>
    		<?php if ( ! $is_www ) : ?>
    			<tr>
    				<th scope='row'><?php esc_html_e( 'Server Address' ); ?></th>
    				<td>
    					<?php
    					printf(
    						/* translators: %s: Host name. */
    						__( 'The internet address of your network will be %s.' ),
    						'<code>' . $hostname . '</code>'
    					);
    					?>
    				</td>
    			</tr>
    		<?php endif; ?>
    			<tr>
    				<th scope='row'><label for="sitename"><?php esc_html_e( 'Network Title' ); ?></label></th>
    				<td>
    					<input name='sitename' id='sitename' type='text' size='45' value='<?php echo esc_attr( $site_name ); ?>' />
    					<p class="description">
    						<?php _e( 'What would you like to call your network?' ); ?>
    					</p>
    				</td>
    			</tr>
    			<tr>
    				<th scope='row'><label for="email"><?php esc_html_e( 'Network Admin Email' ); ?></label></th>
    				<td>
    					<input name='email' id='email' type='text' size='45' value='<?php echo esc_attr( $admin_email ); ?>' />
    					<p class="description">
    						<?php _e( 'Your email address.' ); ?>
    					</p>
    				</td>
    			</tr>
    		</table>
    		<?php submit_button( __( 'Install' ), 'primary', 'submit' ); ?>
    	</form>
    	<?php
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-admin/includes/network.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-admin/includes/network.php#L113)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-admin/includes/network.php#L113-L397)

## 󠀁[Related](https://developer.wordpress.org/reference/functions/network_step1/?output_format=md#related)󠁿

| Uses | Description | 
| [wp_admin_notice()](https://developer.wordpress.org/reference/functions/wp_admin_notice/)`wp-includes/functions.php` |

Outputs an admin notice.

  | 
| [get_clean_basedomain()](https://developer.wordpress.org/reference/functions/get_clean_basedomain/)`wp-admin/includes/network.php` |

Get base domain of network.

  | 
| [allow_subdirectory_install()](https://developer.wordpress.org/reference/functions/allow_subdirectory_install/)`wp-admin/includes/network.php` |

Allow subdirectory installation.

  | 
| [allow_subdomain_install()](https://developer.wordpress.org/reference/functions/allow_subdomain_install/)`wp-admin/includes/network.php` |

Allow subdomain installation

  | 
| [got_mod_rewrite()](https://developer.wordpress.org/reference/functions/got_mod_rewrite/)`wp-admin/includes/misc.php` |

Returns whether the server is running Apache with the mod_rewrite module loaded.

  | 
| [submit_button()](https://developer.wordpress.org/reference/functions/submit_button/)`wp-admin/includes/template.php` |

Echoes a submit button, with provided text and appropriate class(es).

  | 
| [esc_html_e()](https://developer.wordpress.org/reference/functions/esc_html_e/)`wp-includes/l10n.php` |

Displays translated text that has been escaped for safe use in HTML output.

  | 
| [checked()](https://developer.wordpress.org/reference/functions/checked/)`wp-includes/general-template.php` |

Outputs the HTML checked attribute.

  | 
| [apache_mod_loaded()](https://developer.wordpress.org/reference/functions/apache_mod_loaded/)`wp-includes/functions.php` |

Determines whether the specified module exist in the Apache config.

  | 
| [wp_nonce_field()](https://developer.wordpress.org/reference/functions/wp_nonce_field/)`wp-includes/functions.php` |

Retrieves or display nonce hidden field for forms.

  | 
| [__()](https://developer.wordpress.org/reference/functions/__/)`wp-includes/l10n.php` |

Retrieves the translation of $text.

  | 
| [_e()](https://developer.wordpress.org/reference/functions/_e/)`wp-includes/l10n.php` |

Displays translated text.

  | 
| [_x()](https://developer.wordpress.org/reference/functions/_x/)`wp-includes/l10n.php` |

Retrieves translated string with gettext context.

  | 
| [esc_attr()](https://developer.wordpress.org/reference/functions/esc_attr/)`wp-includes/formatting.php` |

Escaping for HTML attributes.

  | 
| [admin_url()](https://developer.wordpress.org/reference/functions/admin_url/)`wp-includes/link-template.php` |

Retrieves the URL to the admin area for the current site.

  | 
| [get_option()](https://developer.wordpress.org/reference/functions/get_option/)`wp-includes/option.php` |

Retrieves an option value based on an option name.

  | 
| [is_wp_error()](https://developer.wordpress.org/reference/functions/is_wp_error/)`wp-includes/load.php` |

Checks whether the given variable is a WordPress Error.

  |

[Show 12 more](https://developer.wordpress.org/reference/functions/network_step1/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/functions/network_step1/?output_format=md#)

## 󠀁[Changelog](https://developer.wordpress.org/reference/functions/network_step1/?output_format=md#changelog)󠁿

| Version | Description | 
| [3.0.0](https://developer.wordpress.org/reference/since/3.0.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fnetwork_step1%2F)
before being able to contribute a note or feedback.