wp/wp-admin/options-permalink.php
changeset 16 a86126ab1dd4
parent 9 177826044cd9
child 18 be944660c56a
equal deleted inserted replaced
15:3d4e9c994f10 16:a86126ab1dd4
     5  * @package WordPress
     5  * @package WordPress
     6  * @subpackage Administration
     6  * @subpackage Administration
     7  */
     7  */
     8 
     8 
     9 /** WordPress Administration Bootstrap */
     9 /** WordPress Administration Bootstrap */
    10 require_once( dirname( __FILE__ ) . '/admin.php' );
    10 require_once __DIR__ . '/admin.php';
    11 
    11 
    12 if ( ! current_user_can( 'manage_options' ) ) {
    12 if ( ! current_user_can( 'manage_options' ) ) {
    13 	wp_die( __( 'Sorry, you are not allowed to manage options for this site.' ) );
    13 	wp_die( __( 'Sorry, you are not allowed to manage options for this site.' ) );
    14 }
    14 }
    15 
    15 
    29 get_current_screen()->add_help_tab(
    29 get_current_screen()->add_help_tab(
    30 	array(
    30 	array(
    31 		'id'      => 'permalink-settings',
    31 		'id'      => 'permalink-settings',
    32 		'title'   => __( 'Permalink Settings' ),
    32 		'title'   => __( 'Permalink Settings' ),
    33 		'content' => '<p>' . __( 'Permalinks can contain useful information, such as the post date, title, or other elements. You can choose from any of the suggested permalink formats, or you can craft your own if you select Custom Structure.' ) . '</p>' .
    33 		'content' => '<p>' . __( 'Permalinks can contain useful information, such as the post date, title, or other elements. You can choose from any of the suggested permalink formats, or you can craft your own if you select Custom Structure.' ) . '</p>' .
    34 			'<p>' . __( 'If you pick an option other than Plain, your general URL path with structure tags (terms surrounded by <code>%</code>) will also appear in the custom structure field and your path can be further modified there.' ) . '</p>' .
    34 			'<p>' . sprintf(
    35 			'<p>' . __( 'When you assign multiple categories or tags to a post, only one can show up in the permalink: the lowest numbered category. This applies if your custom structure includes <code>%category%</code> or <code>%tag%</code>.' ) . '</p>' .
    35 				/* translators: %s: Percent sign (%). */
       
    36 				__( 'If you pick an option other than Plain, your general URL path with structure tags (terms surrounded by %s) will also appear in the custom structure field and your path can be further modified there.' ),
       
    37 				'<code>%</code>'
       
    38 			) . '</p>' .
       
    39 			'<p>' . sprintf(
       
    40 				/* translators: 1: %category%, 2: %tag% */
       
    41 				__( 'When you assign multiple categories or tags to a post, only one can show up in the permalink: the lowest numbered category. This applies if your custom structure includes %1$s or %2$s.' ),
       
    42 				'<code>%category%</code>',
       
    43 				'<code>%tag%</code>'
       
    44 			) . '</p>' .
    36 			'<p>' . __( 'You must click the Save Changes button at the bottom of the screen for new settings to take effect.' ) . '</p>',
    45 			'<p>' . __( 'You must click the Save Changes button at the bottom of the screen for new settings to take effect.' ) . '</p>',
    37 	)
    46 	)
    38 );
    47 );
    39 
    48 
    40 get_current_screen()->add_help_tab(
    49 get_current_screen()->add_help_tab(
    46 	)
    55 	)
    47 );
    56 );
    48 
    57 
    49 get_current_screen()->set_help_sidebar(
    58 get_current_screen()->set_help_sidebar(
    50 	'<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
    59 	'<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
    51 	'<p>' . __( '<a href="https://codex.wordpress.org/Settings_Permalinks_Screen">Documentation on Permalinks Settings</a>' ) . '</p>' .
    60 	'<p>' . __( '<a href="https://wordpress.org/support/article/settings-permalinks-screen/">Documentation on Permalinks Settings</a>' ) . '</p>' .
    52 	'<p>' . __( '<a href="https://codex.wordpress.org/Using_Permalinks">Documentation on Using Permalinks</a>' ) . '</p>' .
    61 	'<p>' . __( '<a href="https://wordpress.org/support/article/using-permalinks/">Documentation on Using Permalinks</a>' ) . '</p>' .
    53 	'<p>' . __( '<a href="https://wordpress.org/support/">Support</a>' ) . '</p>'
    62 	'<p>' . __( '<a href="https://wordpress.org/support/">Support</a>' ) . '</p>'
    54 );
    63 );
    55 
    64 
    56 $home_path           = get_home_path();
    65 $home_path           = get_home_path();
    57 $iis7_permalinks     = iis7_supports_permalinks();
    66 $iis7_permalinks     = iis7_supports_permalinks();
    58 $permalink_structure = get_option( 'permalink_structure' );
    67 $permalink_structure = get_option( 'permalink_structure' );
    59 
    68 
    60 $prefix = $blog_prefix = '';
    69 $prefix      = '';
       
    70 $blog_prefix = '';
    61 if ( ! got_url_rewrite() ) {
    71 if ( ! got_url_rewrite() ) {
    62 	$prefix = '/index.php';
    72 	$prefix = '/index.php';
    63 }
    73 }
    64 
    74 
    65 /**
    75 /**
   139 
   149 
   140 	$message = __( 'Permalink structure updated.' );
   150 	$message = __( 'Permalink structure updated.' );
   141 
   151 
   142 	if ( $iis7_permalinks ) {
   152 	if ( $iis7_permalinks ) {
   143 		if ( $permalink_structure && ! $using_index_permalinks && ! $writable ) {
   153 		if ( $permalink_structure && ! $using_index_permalinks && ! $writable ) {
   144 			$message = __( 'You should update your web.config now.' );
   154 			$message = sprintf(
       
   155 				/* translators: %s: web.config */
       
   156 				__( 'You should update your %s file now.' ),
       
   157 				'<code>web.config</code>'
       
   158 			);
   145 		} elseif ( $permalink_structure && ! $using_index_permalinks && $writable ) {
   159 		} elseif ( $permalink_structure && ! $using_index_permalinks && $writable ) {
   146 			$message = __( 'Permalink structure updated. Remove write access on web.config file now!' );
   160 			$message = sprintf(
       
   161 				/* translators: %s: web.config */
       
   162 				__( 'Permalink structure updated. Remove write access on %s file now!' ),
       
   163 				'<code>web.config</code>'
       
   164 			);
   147 		}
   165 		}
   148 	} elseif ( ! $is_nginx && $permalink_structure && ! $using_index_permalinks && ! $writable && $update_required ) {
   166 	} elseif ( ! $is_nginx && $permalink_structure && ! $using_index_permalinks && ! $writable && $update_required ) {
   149 		$message = __( 'You should update your .htaccess now.' );
   167 		$message = sprintf(
       
   168 			/* translators: %s: .htaccess */
       
   169 			__( 'You should update your %s file now.' ),
       
   170 			'<code>.htaccess</code>'
       
   171 		);
   150 	}
   172 	}
   151 
   173 
   152 	if ( ! get_settings_errors() ) {
   174 	if ( ! get_settings_errors() ) {
   153 		add_settings_error( 'general', 'settings_updated', $message, 'updated' );
   175 		add_settings_error( 'general', 'settings_updated', $message, 'success' );
   154 	}
   176 	}
   155 
   177 
   156 	set_transient( 'settings_errors', get_settings_errors(), 30 );
   178 	set_transient( 'settings_errors', get_settings_errors(), 30 );
   157 
   179 
   158 	wp_redirect( admin_url( 'options-permalink.php?settings-updated=true' ) );
   180 	wp_redirect( admin_url( 'options-permalink.php?settings-updated=true' ) );
   159 	exit;
   181 	exit;
   160 }
   182 }
   161 
   183 
   162 flush_rewrite_rules();
   184 flush_rewrite_rules();
   163 
   185 
   164 require( ABSPATH . 'wp-admin/admin-header.php' );
   186 require_once ABSPATH . 'wp-admin/admin-header.php';
   165 ?>
   187 ?>
   166 <div class="wrap">
   188 <div class="wrap">
   167 <h1><?php echo esc_html( $title ); ?></h1>
   189 <h1><?php echo esc_html( $title ); ?></h1>
   168 
   190 
   169 <form name="form" action="options-permalink.php" method="post">
   191 <form name="form" action="options-permalink.php" method="post">
   170 <?php wp_nonce_field( 'update-permalink' ); ?>
   192 <?php wp_nonce_field( 'update-permalink' ); ?>
   171 
   193 
   172 	<p>
   194 	<p>
   173 	<?php
   195 	<?php
   174 		printf(
   196 		printf(
   175 			/* translators: %s: Codex URL */
   197 			/* translators: %s: Documentation URL. */
   176 			__( 'WordPress offers you the ability to create a custom URL structure for your permalinks and archives. Custom URL structures can improve the aesthetics, usability, and forward-compatibility of your links. A <a href="%s">number of tags are available</a>, and here are some examples to get you started.' ),
   198 			__( 'WordPress offers you the ability to create a custom URL structure for your permalinks and archives. Custom URL structures can improve the aesthetics, usability, and forward-compatibility of your links. A <a href="%s">number of tags are available</a>, and here are some examples to get you started.' ),
   177 			__( 'https://codex.wordpress.org/Using_Permalinks' )
   199 			__( 'https://wordpress.org/support/article/using-permalinks/' )
   178 		);
   200 		);
   179 		?>
   201 		?>
   180 	</p>
   202 	</p>
   181 
   203 
   182 <?php
   204 <?php
   200 		<th scope="row"><label><input name="selection" type="radio" value="" <?php checked( '', $permalink_structure ); ?> /> <?php _e( 'Plain' ); ?></label></th>
   222 		<th scope="row"><label><input name="selection" type="radio" value="" <?php checked( '', $permalink_structure ); ?> /> <?php _e( 'Plain' ); ?></label></th>
   201 		<td><code><?php echo get_option( 'home' ); ?>/?p=123</code></td>
   223 		<td><code><?php echo get_option( 'home' ); ?>/?p=123</code></td>
   202 	</tr>
   224 	</tr>
   203 	<tr>
   225 	<tr>
   204 		<th scope="row"><label><input name="selection" type="radio" value="<?php echo esc_attr( $structures[1] ); ?>" <?php checked( $structures[1], $permalink_structure ); ?> /> <?php _e( 'Day and name' ); ?></label></th>
   226 		<th scope="row"><label><input name="selection" type="radio" value="<?php echo esc_attr( $structures[1] ); ?>" <?php checked( $structures[1], $permalink_structure ); ?> /> <?php _e( 'Day and name' ); ?></label></th>
   205 		<td><code><?php echo get_option( 'home' ) . $blog_prefix . $prefix . '/' . date( 'Y' ) . '/' . date( 'm' ) . '/' . date( 'd' ) . '/' . _x( 'sample-post', 'sample permalink structure' ) . '/'; ?></code></td>
   227 		<td><code><?php echo get_option( 'home' ) . $blog_prefix . $prefix . '/' . gmdate( 'Y' ) . '/' . gmdate( 'm' ) . '/' . gmdate( 'd' ) . '/' . _x( 'sample-post', 'sample permalink structure' ) . '/'; ?></code></td>
   206 	</tr>
   228 	</tr>
   207 	<tr>
   229 	<tr>
   208 		<th scope="row"><label><input name="selection" type="radio" value="<?php echo esc_attr( $structures[2] ); ?>" <?php checked( $structures[2], $permalink_structure ); ?> /> <?php _e( 'Month and name' ); ?></label></th>
   230 		<th scope="row"><label><input name="selection" type="radio" value="<?php echo esc_attr( $structures[2] ); ?>" <?php checked( $structures[2], $permalink_structure ); ?> /> <?php _e( 'Month and name' ); ?></label></th>
   209 		<td><code><?php echo get_option( 'home' ) . $blog_prefix . $prefix . '/' . date( 'Y' ) . '/' . date( 'm' ) . '/' . _x( 'sample-post', 'sample permalink structure' ) . '/'; ?></code></td>
   231 		<td><code><?php echo get_option( 'home' ) . $blog_prefix . $prefix . '/' . gmdate( 'Y' ) . '/' . gmdate( 'm' ) . '/' . _x( 'sample-post', 'sample permalink structure' ) . '/'; ?></code></td>
   210 	</tr>
   232 	</tr>
   211 	<tr>
   233 	<tr>
   212 		<th scope="row"><label><input name="selection" type="radio" value="<?php echo esc_attr( $structures[3] ); ?>" <?php checked( $structures[3], $permalink_structure ); ?> /> <?php _e( 'Numeric' ); ?></label></th>
   234 		<th scope="row"><label><input name="selection" type="radio" value="<?php echo esc_attr( $structures[3] ); ?>" <?php checked( $structures[3], $permalink_structure ); ?> /> <?php _e( 'Numeric' ); ?></label></th>
   213 		<td><code><?php echo get_option( 'home' ) . $blog_prefix . $prefix . '/' . _x( 'archives', 'sample permalink base' ) . '/123'; ?></code></td>
   235 		<td><code><?php echo get_option( 'home' ) . $blog_prefix . $prefix . '/' . _x( 'archives', 'sample permalink base' ) . '/123'; ?></code></td>
   214 	</tr>
   236 	</tr>
   216 		<th scope="row"><label><input name="selection" type="radio" value="<?php echo esc_attr( $structures[4] ); ?>" <?php checked( $structures[4], $permalink_structure ); ?> /> <?php _e( 'Post name' ); ?></label></th>
   238 		<th scope="row"><label><input name="selection" type="radio" value="<?php echo esc_attr( $structures[4] ); ?>" <?php checked( $structures[4], $permalink_structure ); ?> /> <?php _e( 'Post name' ); ?></label></th>
   217 		<td><code><?php echo get_option( 'home' ) . $blog_prefix . $prefix . '/' . _x( 'sample-post', 'sample permalink structure' ) . '/'; ?></code></td>
   239 		<td><code><?php echo get_option( 'home' ) . $blog_prefix . $prefix . '/' . _x( 'sample-post', 'sample permalink structure' ) . '/'; ?></code></td>
   218 	</tr>
   240 	</tr>
   219 	<tr>
   241 	<tr>
   220 		<th scope="row">
   242 		<th scope="row">
   221 			<label><input name="selection" id="custom_selection" type="radio" value="custom" <?php checked( ! in_array( $permalink_structure, $structures ) ); ?> />
   243 			<label><input name="selection" id="custom_selection" type="radio" value="custom" <?php checked( ! in_array( $permalink_structure, $structures, true ) ); ?> />
   222 			<?php _e( 'Custom Structure' ); ?>
   244 			<?php _e( 'Custom Structure' ); ?>
   223 			</label>
   245 			</label>
   224 		</th>
   246 		</th>
   225 		<td>
   247 		<td>
   226 			<code><?php echo get_option( 'home' ) . $blog_prefix; ?></code>
   248 			<code><?php echo get_option( 'home' ) . $blog_prefix; ?></code>
   227 			<input name="permalink_structure" id="permalink_structure" type="text" value="<?php echo esc_attr( $permalink_structure ); ?>" class="regular-text code" />
   249 			<input name="permalink_structure" id="permalink_structure" type="text" value="<?php echo esc_attr( $permalink_structure ); ?>" class="regular-text code" />
   228 			<div class="available-structure-tags hide-if-no-js">
   250 			<div class="available-structure-tags hide-if-no-js">
   229 				<div id="custom_selection_updated" aria-live="assertive" class="screen-reader-text"></div>
   251 				<div id="custom_selection_updated" aria-live="assertive" class="screen-reader-text"></div>
   230 				<?php
   252 				<?php
   231 				$available_tags = array(
   253 				$available_tags = array(
   232 					/* translators: %s: permalink structure tag */
   254 					/* translators: %s: Permalink structure tag. */
   233 					'year'     => __( '%s (The year of the post, four digits, for example 2004.)' ),
   255 					'year'     => __( '%s (The year of the post, four digits, for example 2004.)' ),
   234 					/* translators: %s: permalink structure tag */
   256 					/* translators: %s: Permalink structure tag. */
   235 					'monthnum' => __( '%s (Month of the year, for example 05.)' ),
   257 					'monthnum' => __( '%s (Month of the year, for example 05.)' ),
   236 					/* translators: %s: permalink structure tag */
   258 					/* translators: %s: Permalink structure tag. */
   237 					'day'      => __( '%s (Day of the month, for example 28.)' ),
   259 					'day'      => __( '%s (Day of the month, for example 28.)' ),
   238 					/* translators: %s: permalink structure tag */
   260 					/* translators: %s: Permalink structure tag. */
   239 					'hour'     => __( '%s (Hour of the day, for example 15.)' ),
   261 					'hour'     => __( '%s (Hour of the day, for example 15.)' ),
   240 					/* translators: %s: permalink structure tag */
   262 					/* translators: %s: Permalink structure tag. */
   241 					'minute'   => __( '%s (Minute of the hour, for example 43.)' ),
   263 					'minute'   => __( '%s (Minute of the hour, for example 43.)' ),
   242 					/* translators: %s: permalink structure tag */
   264 					/* translators: %s: Permalink structure tag. */
   243 					'second'   => __( '%s (Second of the minute, for example 33.)' ),
   265 					'second'   => __( '%s (Second of the minute, for example 33.)' ),
   244 					/* translators: %s: permalink structure tag */
   266 					/* translators: %s: Permalink structure tag. */
   245 					'post_id'  => __( '%s (The unique ID of the post, for example 423.)' ),
   267 					'post_id'  => __( '%s (The unique ID of the post, for example 423.)' ),
   246 					/* translators: %s: permalink structure tag */
   268 					/* translators: %s: Permalink structure tag. */
   247 					'postname' => __( '%s (The sanitized post title (slug).)' ),
   269 					'postname' => __( '%s (The sanitized post title (slug).)' ),
   248 					/* translators: %s: permalink structure tag */
   270 					/* translators: %s: Permalink structure tag. */
   249 					'category' => __( '%s (Category slug. Nested sub-categories appear as nested directories in the URL.)' ),
   271 					'category' => __( '%s (Category slug. Nested sub-categories appear as nested directories in the URL.)' ),
   250 					/* translators: %s: permalink structure tag */
   272 					/* translators: %s: Permalink structure tag. */
   251 					'author'   => __( '%s (A sanitized version of the author name.)' ),
   273 					'author'   => __( '%s (A sanitized version of the author name.)' ),
   252 				);
   274 				);
   253 
   275 
   254 				/**
   276 				/**
   255 				 * Filters the list of available permalink structure tags on the Permalinks settings page.
   277 				 * Filters the list of available permalink structure tags on the Permalinks settings page.
   256 				 *
   278 				 *
   257 				 * @since 4.8.0
   279 				 * @since 4.9.0
   258 				 *
   280 				 *
   259 				 * @param string[] $available_tags An array of key => value pairs of available permalink structure tags.
   281 				 * @param string[] $available_tags An array of key => value pairs of available permalink structure tags.
   260 				 */
   282 				 */
   261 				$available_tags = apply_filters( 'available_permalink_structure_tags', $available_tags );
   283 				$available_tags = apply_filters( 'available_permalink_structure_tags', $available_tags );
   262 
   284 
   263 				/* translators: %s: permalink structure tag */
   285 				/* translators: %s: Permalink structure tag. */
   264 				$structure_tag_added = __( '%s added to permalink structure' );
   286 				$structure_tag_added = __( '%s added to permalink structure' );
   265 
   287 
   266 				/* translators: %s: permalink structure tag */
   288 				/* translators: %s: Permalink structure tag. */
   267 				$structure_tag_already_used = __( '%s (already used in permalink structure)' );
   289 				$structure_tag_already_used = __( '%s (already used in permalink structure)' );
   268 
   290 
   269 				if ( ! empty( $available_tags ) ) :
   291 				if ( ! empty( $available_tags ) ) :
   270 					?>
   292 					?>
   271 					<p><?php _e( 'Available tags:' ); ?></p>
   293 					<p><?php _e( 'Available tags:' ); ?></p>
   293 </table>
   315 </table>
   294 
   316 
   295 <h2 class="title"><?php _e( 'Optional' ); ?></h2>
   317 <h2 class="title"><?php _e( 'Optional' ); ?></h2>
   296 <p>
   318 <p>
   297 <?php
   319 <?php
   298 /* translators: %s: placeholder that must come at the start of the URL */
   320 /* translators: %s: Placeholder that must come at the start of the URL. */
   299 printf( __( 'If you like, you may enter custom structures for your category and tag URLs here. For example, using <code>topics</code> as your category base would make your category links like <code>%s/topics/uncategorized/</code>. If you leave these blank the defaults will be used.' ), get_option( 'home' ) . $blog_prefix . $prefix );
   321 printf( __( 'If you like, you may enter custom structures for your category and tag URLs here. For example, using <code>topics</code> as your category base would make your category links like <code>%s/topics/uncategorized/</code>. If you leave these blank the defaults will be used.' ), get_option( 'home' ) . $blog_prefix . $prefix );
   300 ?>
   322 ?>
   301 </p>
   323 </p>
   302 
   324 
   303 <table class="form-table" role="presentation">
   325 <table class="form-table" role="presentation">
   304 	<tr>
   326 	<tr>
   305 		<th><label for="category_base"><?php /* translators: prefix for category permalinks */ _e( 'Category base' ); ?></label></th>
   327 		<th><label for="category_base"><?php /* translators: Prefix for category permalinks. */ _e( 'Category base' ); ?></label></th>
   306 		<td><?php echo $blog_prefix; ?> <input name="category_base" id="category_base" type="text" value="<?php echo esc_attr( $category_base ); ?>" class="regular-text code" /></td>
   328 		<td><?php echo $blog_prefix; ?> <input name="category_base" id="category_base" type="text" value="<?php echo esc_attr( $category_base ); ?>" class="regular-text code" /></td>
   307 	</tr>
   329 	</tr>
   308 	<tr>
   330 	<tr>
   309 		<th><label for="tag_base"><?php _e( 'Tag base' ); ?></label></th>
   331 		<th><label for="tag_base"><?php _e( 'Tag base' ); ?></label></th>
   310 		<td><?php echo $blog_prefix; ?> <input name="tag_base" id="tag_base" type="text" value="<?php echo esc_attr( $tag_base ); ?>" class="regular-text code" /></td>
   332 		<td><?php echo $blog_prefix; ?> <input name="tag_base" id="tag_base" type="text" value="<?php echo esc_attr( $tag_base ); ?>" class="regular-text code" /></td>
   323 			if ( file_exists( $home_path . 'web.config' ) ) :
   345 			if ( file_exists( $home_path . 'web.config' ) ) :
   324 				?>
   346 				?>
   325 <p>
   347 <p>
   326 				<?php
   348 				<?php
   327 				printf(
   349 				printf(
   328 					/* translators: 1: web.config, 2: Codex URL, 3: CTRL + a, 4: element code */
   350 					/* translators: 1: web.config, 2: Documentation URL, 3: CTRL + a, 4: Element code. */
   329 					__( 'If your %1$s file was <a href="%2$s">writable</a>, we could do this automatically, but it isn&#8217;t so this is the url rewrite rule you should have in your %1$s file. Click in the field and press %3$s to select all. Then insert this rule inside of the %4$s element in %1$s file.' ),
   351 					__( 'If your %1$s file was <a href="%2$s">writable</a>, we could do this automatically, but it isn&#8217;t so this is the url rewrite rule you should have in your %1$s file. Click in the field and press %3$s to select all. Then insert this rule inside of the %4$s element in %1$s file.' ),
   330 					'<code>web.config</code>',
   352 					'<code>web.config</code>',
   331 					__( 'https://codex.wordpress.org/Changing_File_Permissions' ),
   353 					__( 'https://wordpress.org/support/article/changing-file-permissions/' ),
   332 					'<kbd>CTRL + a</kbd>',
   354 					'<kbd>CTRL + a</kbd>',
   333 					'<code>/&lt;configuration&gt;/&lt;system.webServer&gt;/&lt;rewrite&gt;/&lt;rules&gt;</code>'
   355 					'<code>/&lt;configuration&gt;/&lt;system.webServer&gt;/&lt;rewrite&gt;/&lt;rules&gt;</code>'
   334 				);
   356 				);
   335 				?>
   357 				?>
   336 </p>
   358 </p>
   349 </p>
   371 </p>
   350 		<?php else : ?>
   372 		<?php else : ?>
   351 <p>
   373 <p>
   352 			<?php
   374 			<?php
   353 			printf(
   375 			printf(
   354 				/* translators: 1: Codex URL, 2: web.config, 3: CTRL + a */
   376 				/* translators: 1: Documentation URL, 2: web.config, 3: CTRL + a */
   355 				__( 'If the root directory of your site was <a href="%1$s">writable</a>, we could do this automatically, but it isn&#8217;t so this is the url rewrite rule you should have in your %2$s file. Create a new file, called %2$s in the root directory of your site. Click in the field and press %3$s to select all. Then insert this code into the %2$s file.' ),
   377 				__( 'If the root directory of your site was <a href="%1$s">writable</a>, we could do this automatically, but it isn&#8217;t so this is the url rewrite rule you should have in your %2$s file. Create a new file, called %2$s in the root directory of your site. Click in the field and press %3$s to select all. Then insert this code into the %2$s file.' ),
   356 				__( 'https://codex.wordpress.org/Changing_File_Permissions' ),
   378 				__( 'https://wordpress.org/support/article/changing-file-permissions/' ),
   357 				'<code>web.config</code>',
   379 				'<code>web.config</code>',
   358 				'<kbd>CTRL + a</kbd>'
   380 				'<kbd>CTRL + a</kbd>'
   359 			);
   381 			);
   360 			?>
   382 			?>
   361 </p>
   383 </p>
   373 			?>
   395 			?>
   374 </p>
   396 </p>
   375 		<?php endif; ?>
   397 		<?php endif; ?>
   376 	<?php endif; ?>
   398 	<?php endif; ?>
   377 <?php elseif ( $is_nginx ) : ?>
   399 <?php elseif ( $is_nginx ) : ?>
   378 	<p><?php _e( '<a href="https://codex.wordpress.org/Nginx">Documentation on Nginx configuration</a>.' ); ?></p>
   400 	<p><?php _e( '<a href="https://wordpress.org/support/article/nginx/">Documentation on Nginx configuration</a>.' ); ?></p>
   379 	<?php
   401 	<?php
   380 else :
   402 else :
   381 	if ( $permalink_structure && ! $using_index_permalinks && ! $writable && $update_required ) :
   403 	if ( $permalink_structure && ! $using_index_permalinks && ! $writable && $update_required ) :
   382 		?>
   404 		?>
   383 <p>
   405 <p>
   384 		<?php
   406 		<?php
   385 		printf(
   407 		printf(
   386 			/* translators: 1: .htaccess, 2: Codex URL, 3: CTRL + a */
   408 			/* translators: 1: .htaccess, 2: Documentation URL, 3: CTRL + a */
   387 			__( 'If your %1$s file was <a href="%2$s">writable</a>, we could do this automatically, but it isn&#8217;t so these are the mod_rewrite rules you should have in your %1$s file. Click in the field and press %3$s to select all.' ),
   409 			__( 'If your %1$s file was <a href="%2$s">writable</a>, we could do this automatically, but it isn&#8217;t so these are the mod_rewrite rules you should have in your %1$s file. Click in the field and press %3$s to select all.' ),
   388 			'<code>.htaccess</code>',
   410 			'<code>.htaccess</code>',
   389 			__( 'https://codex.wordpress.org/Changing_File_Permissions' ),
   411 			__( 'https://wordpress.org/support/article/changing-file-permissions/' ),
   390 			'<kbd>CTRL + a</kbd>'
   412 			'<kbd>CTRL + a</kbd>'
   391 		);
   413 		);
   392 		?>
   414 		?>
   393 </p>
   415 </p>
   394 <form action="options-permalink.php" method="post">
   416 <form action="options-permalink.php" method="post">
   395 		<?php wp_nonce_field( 'update-permalink' ); ?>
   417 		<?php wp_nonce_field( 'update-permalink' ); ?>
   396 	<p><textarea rows="6" class="large-text readonly" name="rules" id="rules" readonly="readonly"><?php echo esc_textarea( $wp_rewrite->mod_rewrite_rules() ); ?></textarea></p>
   418 	<p><textarea rows="6" class="large-text readonly" name="rules" id="rules" readonly="readonly"><?php echo esc_textarea( $wp_rewrite->mod_rewrite_rules() ); ?></textarea></p>
   397 </form>
   419 </form>
   398 	<?php endif; ?>
   420 	<?php endif; ?>
   399 <?php endif; ?>
   421 <?php endif; ?>
   400 <?php } // multisite ?>
   422 <?php } // End if ! is_multisite(). ?>
   401 
   423 
   402 </div>
   424 </div>
   403 
   425 
   404 <?php require( ABSPATH . 'wp-admin/admin-footer.php' ); ?>
   426 <?php require_once ABSPATH . 'wp-admin/admin-footer.php'; ?>