Ajoutez des constantes réseau supplémentaires à wp-config.php dynamiquement

10

Lorsque vous démarrez avec une nouvelle installation réseau, la première étape est une installation de site unique qui a une ligne supplémentaire dans le wp-config.phpfichier:

define( 'WP_ALLOW_MULTISITE', true );

Après cela, nous devons aller à Tools > Network Setup, entrer quelques détails comme le nom du réseau et le courrier électronique du super administrateur et enfin appuyer sur le bouton pour exécuter la configuration.

La prochaine étape, le pop-up est en fait deux étapes:

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

    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 .htaccessfichier.

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

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 à aller à wp-config.phpchaque fois et à le modifier à nouveau.

La première chose qui m'est venue à l'esprit était de vérifier la base de données pour la {$wpdb->prefix}sitemetatable, mais je ne veux pas faire de requête supplémentaire sur chaque charge de site. La deuxième chose à laquelle j'ai pensé était de vérifier si le blogs.direxiste déjà, mais ce n'est pas le cas.

Question: Comment puis-je indiquer que j'ai déjà franchi la première étape de la configuration du réseau de manière à ne pas avoir de surcharge importante ou à diminuer les performances.

kaiser
la source
2
Vous ne devriez pas essayer d'automatiser tout: i.imgur.com/OoF9Md7.png
Ünsal Korkmaz
1
c'est en fait incroyable le processus est toujours le même alors que de plus en plus d'installations WP deviennent multisites
JMau
@ ÜnsalKorkmaz Si vous avez vu ma configuration, vous comprendrez que ce n'est qu'un pas de plus. Prochaine chose: wp-configgénérateur Grunt .
kaiser
Je ne comprends pas pourquoi vous devez vérifier s'il existe une condition pour chaque chargement de page, puis définir des constantes. Vous devez exécuter une configuration multisite ou vous ne l'êtes pas. Si vous parlez d'automatiser la configuration de WordPress, vous pouvez examiner quelque chose comme YeoPress github.com/wesleytodd/YeoPress
kingkool68
@ kingkool68 Facile. Parce que je ne veux pas commenter / commenter ces constantes chaque fois que je configure une installation réseau. Ce n'est pas des frais généraux et l'étape est tout simplement inutile. Et non, je ne parle pas d'automatiser la configuration de WP. Btw: Yeoman utilise Grunt pour les tâches (que j'ai mentionnées ci-dessus).
kaiser

Réponses:

1

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

  • vérifier la base de données pour la {$wpdb->prefix}sitemetatable;
  • s'il n'existe pas -> retourne faux;
  • s'il existe -> ajouter un travail cron WP à réécrire wp-config.php-> retourner vrai.

Le travail cron WP réécrirait le wp-config.phppour éliminer complètement la vérification.

De cette façon, vous n'avez qu'une demande de base de données supplémentaire jusqu'à ce que le réseau soit configuré et que le travail cron fasse sa magie.

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

Alain Schlesser
la source
BTW, le script pourrait changer le wp-config.phpfichier directement, mais je suppose qu'il serait verrouillé à ce point ...
Alain Schlesser
Cette idée de travail cron est drôle :) Merci pour cela. Btw, vous pouvez modifier votre réponse.
kaiser
-1

Inspecter wp-admin/network.phpet wp-admin/includes/schema.phpclasser. Vous pouvez créer une condition basée sur WP_INSTALLING_NETWORK

Mettre à 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-le dans le dossier mu-plugins.
  2. nouvelle installation wp
  3. aller au panneau d'administration
  4. cliquez sur outils
  5. cliquez pour configuration du réseau
  6. exécuter la configuration
  7. ???
  8. profit!!!

entrez la description de l'image ici

Ünsal Korkmaz
la source
J'ai déjà vérifié ça. Le fait est que cela wp-load.phparrive wp-config.phpplus tôt, donc WP_INSTALLING_NETWORKne sera pas défini. Mais même s'il était disponible, il n'est disponible que lors de la configuration du réseau. Que dois-je faire pour laisser les constantes une fois l'installation terminée?
kaiser
Non .. vous devez utiliser une fonction pour exécuter une fois et écrire vos définitions dans le fichier wp-config.php une fois. Vous pouvez le penser comme register_activation_hook
Ünsal Korkmaz
index.phptire ./wp-blog-header.php), qui tire ensuite wp-load.phpet à partir de là wp-config.phpest appelé. Un aperçu peut être trouvé ici . admin.phplui-même est appelé avant setup.phpet network.php(et s'appelle wp-load.phplui - même au début), donc config est déjà en cours d'exécution.
kaiser
Et comme on WP_INSTALLING_NETWORKobtient define()sans vérifier si c'est déjà fait defined(), je créerais un Fatal Errorlà-bas. Veuillez me prouver le contraire et lui donner un test. :)
kaiser
2
Non Ünsal, je ne le suis pas. J'ignore même le fait que je pourrais prendre la bande dessinée hors sujet ci-dessus comme trolling ou simplement grossière. Je cherche une solution. Période. Mais avoir un wp-config.phpfichier accessible en écriture est un risque pour la sécurité. Considérez que vous avez là tous les détails importants. Je vous ai montré qu'il n'y avait aucun moyen que cela fonctionne (sans avoir un fichier de configuration accessible en écriture). Ce que je recherche, c'est un indicateur (qui ne ralentit pas le système) que je peux vérifier et utiliser comme commutateur. Tout le reste ne fonctionnera pas.
kaiser
-1

Si votre configuration est la même à chaque fois (installation de sous-domaine), vous pourrez peut-être coller le morceau 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 );

Geoff
la source
Comme vous pouvez le voir dans la question, je suis tout à fait conscient des constantes nécessaires. Ce que je recherche, c'est un indicateur fiable si la configuration a déjà passé l'étape 1, rien d'autre. Veuillez voir la question réelle surlignée en bas. Merci pour vos efforts.
kaiser
Ma réponse a été de contester si vous aviez même besoin de l'indicateur, mais plutôt de compter sur la variable serveur pour servir la DOMAIN_CURRENT_SITEconstante correcte que WordPress vous donne après avoir terminé la configuration interne.
Geoff