Agregue constantes de red adicionales a wp-config.php dinámicamente

10

Al comenzar con una instalación de red nueva, el primer paso es una instalación de sitio único que tiene una línea adicional en el wp-config.phparchivo:

define( 'WP_ALLOW_MULTISITE', true );

Después de eso, debemos Tools > Network Setupingresar, ingresar algunos detalles como el nombre de la red y el correo electrónico de superadministrador y finalmente presionar el botón para ejecutar la configuración.

El siguiente paso que aparece es en realidad dos pasos:

  1. Agregue constantes adicionales a su wp-config.phparchivo

    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. Agregue algunas reglas a su .htaccessarchivo.

Como no hago instalaciones de un solo sitio (ya no hay razón para eso), me gustaría agregar esas constantes dinámicamente a mi wp-config.phparchivo:

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 );
}

Así que no tengo que ir a wp-config.phpcada vez y editarlo nuevamente.

Lo primero que se me ocurrió fue verificar la base de datos de la {$wpdb->prefix}sitemetatabla, pero no quiero hacer una consulta adicional en cada carga de sitio. Lo segundo que pensé fue comprobar si blogs.dirya existe, pero ese no es el caso.

Pregunta: ¿Cómo puedo indicar que ya pasé el primer paso de la configuración de la red de manera que no tenga una sobrecarga masiva o disminuya el rendimiento?

emperador
fuente
2
No debe intentar automatizar todo: i.imgur.com/OoF9Md7.png
Ünsal Korkmaz
1
en realidad es increíble el proceso sigue siendo el mismo, mientras que cada vez más se convierten en múltiples sitios de instalación WP
JMau
@ ÜnsalKorkmaz Si ha visto la configuración de mi configuración, comprenderá que esto es solo un paso más. Lo siguiente: wp-configgenerador de roncos .
kaiser
No puedo entender por qué necesitaría verificar si existe una condición para cada carga de página y luego definir constantes. Estás ejecutando una configuración multisitio o no. Si está hablando de automatizar la configuración de WordPress, puede consultar algo como YeoPress github.com/wesleytodd/YeoPress
kingkool68
@ kingkool68 Fácil. Porque no quiero descomentar / comentar esas constantes cada vez que configuro una instalación de red. No es una sobrecarga y el paso simplemente es innecesario. Y no, no estoy hablando de automatizar la configuración de WP. Por cierto: Yeoman usa Grunt para las tareas (que mencioné anteriormente).
kaiser

Respuestas:

1

No he probado esto, pero si necesita encontrar una solución, probablemente intente hacerlo de la siguiente manera agregando un script a la if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )condición que ha descrito anteriormente, eso sería:

  • verifique el DB para la {$wpdb->prefix}sitemetatabla;
  • si no existe -> devuelve falso;
  • si existe -> agregue un trabajo cron de WP para reescribir wp-config.php-> return true.

El trabajo cron de WP reescribirá el wp-config.phppara eliminar la comprobación por completo.

De esta manera, solo tiene una solicitud de base de datos adicional hasta que la red esté configurada y el trabajo cron haya hecho su magia.

Tenga en cuenta que vale la pena el esfuerzo, aunque ...;)

Alain Schlesser
fuente
Por cierto, el script podría cambiar el wp-config.phparchivo directamente, pero supongo que estaría bloqueado en ese punto ...
Alain Schlesser
Esa idea de trabajo cron es divertida :) Gracias por eso. Por cierto, puedes editar tu respuesta.
kaiser
-1

Inspeccionar wp-admin/network.phpy wp-admin/includes/schema.phparchivar. Puede crear una condición basada en WP_INSTALLING_NETWORK

Actualizar:

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. pon esto en la carpeta mu-plugins.
  2. wp fresco instalar
  3. ir al panel de administración
  4. haga clic en herramientas
  5. haga clic para configurar la red
  6. ejecuta la configuración
  7. ???
  8. ¡¡¡lucro!!!

ingrese la descripción de la imagen aquí

Ünsal Korkmaz
fuente
Ya lo revisé. El punto es que wp-load.phpllega wp-config.phpantes, por WP_INSTALLING_NETWORKlo que no se definirá. Pero incluso si estuviera disponible, solo está disponible durante la configuración de la red. ¿Qué haría para dejar las constantes después de que se haya ejecutado la instalación?
Kaiser
No ... debe usar una función para ejecutar una vez y escribir sus definiciones en el archivo wp-config.php una vez. Puedes pensarlo como register_activation_hook
Ünsal Korkmaz
index.phppulls ./wp-blog-header.php), que luego tira wp-load.phpy desde allí wp-config.phpse llama. Un resumen se puede encontrar aquí . admin.phpse llama a sí mismo antes setup.phpy network.php(y se llama a wp-load.phpsí mismo al principio), por lo que config ya se ha estado ejecutando.
Kaiser
Y como WP_INSTALLING_NETWORKsucede define()sin verificar si ya está defined(), crearía un Fatal Errorallí. Por favor, prueba que estoy equivocado y pruébalo. :)
Kaiser
2
No Ünsal, no lo soy. Incluso estoy ignorando el hecho de que podría tomar el cómic fuera de tema de arriba como trolling o simplemente grosero. Estoy buscando una solución. Período. Pero tener un wp-config.phparchivo grabable es un riesgo de seguridad. Considere que tiene todos los detalles importantes allí. Te mostré que no hay forma de que esto funcione (sin tener un archivo de configuración grabable). Lo que estoy buscando es un indicador (que no ralentiza el sistema) que puedo verificar y usar como interruptor. Todo lo demás no funcionará.
Kaiser
-1

Si su configuración es la misma cada vez (instalación de subdominio), entonces puede pegar todo el fragmento en su primer paso:

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
fuente
Como puede ver en la pregunta, soy bastante consciente de las constantes necesarias. Lo que estoy buscando es un indicador confiable si la configuración ya pasó el paso 1, nada más. Consulte la pregunta real resaltada en la parte inferior. Gracias por tus esfuerzos difíciles.
kaiser
Mi respuesta fue cuestionar si incluso necesita el indicador, sino confiar en la variable del servidor para servir la DOMAIN_CURRENT_SITEconstante correcta que WordPress le brinda después de completar la configuración interna.
Geoff