Avertissement: il s'agit simplement d'un test pour les installations de développement et non pour les sites de production
J'étais curieux de voir s'il y avait une solution de contournement, pour ceux qui veulent développer des multisites sur leurs installations de développement mais sur des ports différents de :80
et :443
, par exemple :8080
.
Je n'ai trouvé que ce billet de blog d'Henri Benoit. Là, il donne des exemples sur la façon de modifier le noyau 3.9.1, pour contourner les restrictions du noyau.
Voici un plugin indispensable/wp-content/mu-plugins/wpse-ms-on-different-port.php
où nous essayons d'éviter les modifications de base:
<?php
/**
* Test for multisite support on a different port than :80 and :443 (e.g. :8080)
*
* Here we assume that the 'siteurl' and 'home' options contain the :8080 port
*
* WARNING: Not suited for production sites!
*/
/**
* Get around the problem with wpmu_create_blog() where sanitize_user()
* strips out the semicolon (:) in the $domain string
* This means created sites with hostnames of
* e.g. example.tld8080 instead of example.tld:8080
*/
add_filter( 'sanitize_user', function( $username, $raw_username, $strict )
{
// Edit the port to your needs
$port = 8080;
if( $strict // wpmu_create_blog uses strict mode
&& is_multisite() // multisite check
&& $port == parse_url( $raw_username, PHP_URL_PORT ) // raw domain has port
&& false === strpos( $username, ':' . $port ) // stripped domain is without correct port
)
$username = str_replace( $port, ':' . $port, $username ); // replace e.g. example.tld8080 to example.tld:8080
return $username;
}, 1, 3 );
/**
* Temporarly change the port (e.g. :8080 ) to :80 to get around
* the core restriction in the network.php page.
*/
add_action( 'load-network.php', function()
{
add_filter( 'option_active_plugins', function( $value )
{
add_filter( 'option_siteurl', function( $value )
{
// Edit the port to your needs
$port = 8080;
// Network step 2
if( is_multisite() || network_domain_check() )
return $value;
// Network step 1
static $count = 0;
if( 0 === $count++ )
$value = str_replace( ':' . $port, ':80', $value );
return $value;
} );
return $value;
} );
} );
Je viens de tester cela sur mon installation de développement, mais cela pourrait bien sûr nécessiter plus de vérifications ;-)
echo get_clean_basedomain();
? Les ports pris en charge semblent être:80
et:443
.