wp_install_maybe_enable_pretty_permalinks() – Maybe enable pretty permalinks on installation.

You appear to be a bot. Output may be restricted

Description

Maybe enable pretty permalinks on installation.

If after enabling pretty permalinks don't work, fallback to query-string permalinks.

Usage

$bool = wp_install_maybe_enable_pretty_permalinks();

Parameters

Returns

bool Whether pretty permalinks are enabled. False otherwise.

Source

File name: wordpress/wp-admin/includes/upgrade.php


Lines:

1 to 64 of 64
function wp_install_maybe_enable_pretty_permalinks() {
  global $wp_rewrite;

  // Bail if a permalink structure is already enabled.
  if ( get_option( 'permalink_structure' ) ) {
    return true;
  }

  /*
	 * The Permalink structures to attempt.
	 *
	 * The first is designed for mod_rewrite or nginx rewriting.
	 *
	 * The second is PATHINFO-based permalinks for web server configurations
	 * without a true rewrite module enabled.
	 */
  $permalink_structures = array(
    '/%year%/%monthnum%/%day%/%postname%/',
    '/index.php/%year%/%monthnum%/%day%/%postname%/',
  );

  foreach ( (array) $permalink_structures as $permalink_structure ) {
    $wp_rewrite->set_permalink_structure( $permalink_structure );

    /*
		 * Flush rules with the hard option to force refresh of the web-server's
		 * rewrite config file (e.g. .htaccess or web.config).
		 */
    $wp_rewrite->flush_rules( true );

    $test_url = '';

    // Test against a real WordPress post.
    $first_post = get_page_by_path( sanitize_title( _x( 'hello-world', 'Default post slug' ) ), OBJECT, 'post' );
    if ( $first_post ) {
      $test_url = get_permalink( $first_post->ID );
    }

    /*
		 * Send a request to the site, and check whether
		 * the 'X-Pingback' header is returned as expected.
		 *
		 * Uses wp_remote_get() instead of wp_remote_head() because web servers
		 * can block head requests.
		 */
    $response          = wp_remote_get( $test_url, array( 'timeout' => 5 ) );
    $x_pingback_header = wp_remote_retrieve_header( $response, 'X-Pingback' );
    $pretty_permalinks = $x_pingback_header && get_bloginfo( 'pingback_url' ) === $x_pingback_header;

    if ( $pretty_permalinks ) {
      return true;
    }
  }

  /*
	 * If it makes it this far, pretty permalinks failed.
	 * Fallback to query-string permalinks.
	 */
  $wp_rewrite->set_permalink_structure( '' );
  $wp_rewrite->flush_rules( true );

  return false;
}
 

 View on GitHub View on Trac