Ajout dynamique de constantes réseau supplémentaires à wp-config.php

10

Lorsque vous démarrez avec une nouvelle installation réseau, la première étape consiste en une installation sur un seul site comportant une ligne supplémentaire dans le fichier wp-config.php :

define( 'WP_ALLOW_MULTISITE', true );

Après cela, nous devons aller à Tools > Network Setup , entrer quelques détails tels que le nom du réseau et le courrier électronique du super administrateur, puis cliquer sur le bouton pour lancer la configuration.

La prochaine étape qui apparaît est en fait deux étapes:

  1. Ajoutez des constantes supplémentaires à votre fichier wp-config.php

    .
    define( 'MULTISITE', true );
    define( 'SUBDOMAIN_INSTALL', true );
    define( 'DOMAIN_CURRENT_SITE', 'example.com' );
    define( 'PATH_CURRENT_SITE', '/' );
    define( 'SITE_ID_CURRENT_SITE', true );
    define( 'BLOG_ID_CURRENT_SITE', true );
    
  2. Ajoutez des règles à votre fichier .htaccess .

Comme je ne fais plus d'installations sur un seul site (plus aucune raison pour cela), j'aimerais ajouter ces constantes dynamiquement à mon fichier wp-config.php :

define( 'WP_ALLOW_MULTISITE', true );
if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )
{
    define( 'MULTISITE', true );
    define( 'SUBDOMAIN_INSTALL', true );
    define( 'DOMAIN_CURRENT_SITE', 'example.com' );
    define( 'PATH_CURRENT_SITE', '/' );
    define( 'SITE_ID_CURRENT_SITE', true );
    define( 'BLOG_ID_CURRENT_SITE', true );
}

Je n'ai donc pas besoin d'aller à la wp-config.php à chaque fois et de le modifier à nouveau.

La 1ère chose qui m'est venue à l’esprit était de vérifier la base de données pour la table {$wpdb->prefix}sitemeta , mais je ne souhaite pas effectuer de requête supplémentaire à chaque chargement de site. La 2e chose à laquelle je pensais était de vérifier si le blogs.dir existe déjà, mais ce n'est pas le cas.

  

Question: Comment puis-je indiquer que j'ai déjà réussi la première étape de la configuration du réseau sans trop de charge, ni moins de performances?

    
posée kaiser 12.08.2013 - 14:18

3 réponses

1

Je n'ai pas testé cela, mais si vous aviez besoin de trouver une telle solution, j'essaierais probablement de le faire de la manière suivante en ajoutant un script à la condition if ( SOME_CHECK_IF_STEP-1_WAS_PASSED ) que vous avez décrite ci-dessus. :

  • recherchez dans la base de données la table {$wpdb->prefix}sitemeta ;
  • s'il n'existe pas - > retourne faux;
  • s'il existe - > ajoutez un travail cron WP pour réécrire wp-config.php - > retourne vrai.

Le travail cron WP va réécrire le wp-config.php pour éliminer complètement le contrôle.

De cette façon, vous ne disposez que d'une requête de base de données supplémentaire jusqu'à ce que le réseau soit configuré et que le travail cron fasse son effet.

Notez que cela en vaut la peine, cependant ...;)

    
réponse donnée Alain Schlesser 10.03.2016 - 13:15
-1

Inspectez les fichiers wp-admin/network.php et wp-admin/includes/schema.php . Vous pouvez créer une condition basée sur WP_INSTALLING_NETWORK

.

Mise à jour:

if (is_admin()){
    /* First Step */
    if (!defined( 'WP_ALLOW_MULTISITE')){
            $current_wp_config = file_get_contents(ABSPATH . 'wp-config.php');

            $my_defines = "/* First we put WP_ALLOW_MULTISITE  */\r\n" .
                    "define('WP_ALLOW_MULTISITE', true); \r\n";

            $current_wp_config = str_replace("/* That's all, stop editing", $my_defines . "/* That's all, stop editing", $current_wp_config);       
            file_put_contents(ABSPATH . 'wp-config.php', $current_wp_config);   
    }   
    /* Second Step */
    if (!defined("WP_DEFINES_IMPORTED") && defined("WP_INSTALLING_NETWORK") && $_POST){
        $current_wp_config = file_get_contents(ABSPATH . 'wp-config.php');

        $my_defines = "/* Now we define */\r\n" .
            "define('WP_DEFINES_IMPORTED', true); \r\n" .
            "define('MULTISITE', true); \r\n".
            "define('SUBDOMAIN_INSTALL', true); \r\n".
            "define('DOMAIN_CURRENT_SITE', '". get_clean_basedomain() . "'); \r\n".
            "define('PATH_CURRENT_SITE', '". parse_url(  trailingslashit( get_option( 'home' ) ), PHP_URL_PATH ) . "'); \r\n".
            "define('SITE_ID_CURRENT_SITE', 1); \r\n".
            "define('BLOG_ID_CURRENT_SITE', 1); \r\n";

        $current_wp_config = str_replace("/* That's all, stop editing", $my_defines . "/* That's all, stop editing", $current_wp_config);       
        file_put_contents(ABSPATH . 'wp-config.php', $current_wp_config);   
    }
}
  1. mettez ceci dans le dossier mu-plugins.
  2. nouvelle installation wp
  3. aller au panneau d'administration
  4. cliquez sur outils
  5. cliquez pour configurer le réseau
  6. lancez la configuration
  7. ???
  8. profit !!!

    
réponse donnée Ünsal Korkmaz 12.08.2013 - 15:38
-1

Si votre configuration est identique à chaque fois (installation de sous-domaine), vous pourrez peut-être coller le bloc entier dans votre première étape:

define( 'MULTISITE', true ); define( 'SUBDOMAIN_INSTALL', true ); define( 'DOMAIN_CURRENT_SITE', $_SERVER[ 'HTTP_HOST' ] ); define( 'PATH_CURRENT_SITE', '/' ); define( 'SITE_ID_CURRENT_SITE', true ); define( 'BLOG_ID_CURRENT_SITE', true );

    
réponse donnée Geoff 26.01.2016 - 21:41

Lire d'autres questions sur les étiquettes