将其他网络常量动态添加到wp-config.php

时间:2013-08-12 作者:kaiser

当开始新的网络安装时,第一步是单站点安装,在wp-config.php 文件:

define( \'WP_ALLOW_MULTISITE\', true );
之后我们要去Tools > Network Setup, 输入一些详细信息,如网络名称和超级管理员电子邮件,最后点击按钮运行安装程序。

弹出窗口的下一步实际上是两个步骤:

向您的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 );
为您的.htaccess 文件由于我不进行单站点安装(没有任何理由),我想将这些常量动态添加到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 );
}
所以我不必去wp-config.php 每次,然后再次编辑。

我想到的第一件事是检查数据库中{$wpdb->prefix}sitemeta 表,但我不想对每个站点负载进行额外的查询。我想到的第二件事是检查blogs.dir 已经存在,但事实并非如此。

Question: 我怎样才能表明我已经通过了网络设置的第一步,而不会产生巨大的开销或降低性能。

3 个回复
SO网友:Alain Schlesser

我还没有对此进行测试,但如果您需要找到这样的解决方案,我可能会尝试通过在if ( SOME_CHECK_IF_STEP-1_WAS_PASSED ) 您在上面描述的情况下,将:

检查DB的{$wpdb->prefix}sitemeta 表格

  • 如果不存在->返回false
  • 如果存在->添加要重写的WP cron作业wp-config.php -> 返回true
  • WP cron作业将重写wp-config.php 彻底消除检查。

    这样,在网络设置完成并且cron作业发挥其魔力之前,您只有一个额外的DB请求。

    请注意,尽管如此,这确实值得付出努力……;)

    SO网友:Ünsal Korkmaz

    检查wp-admin/network.phpwp-admin/includes/schema.php 文件。您可以根据创建条件WP_INSTALLING_NETWORK

    更新时间:

    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);   
        }
    }
    
    将此放入mu插件文件夹
  • 全新wp安装
  • 转到管理面板
  • 单击工具
  • 单击网络设置
  • 运行安装程序
  • enter image description here

  • SO网友:Geoff

    如果每次安装都是相同的(子域安装),那么您可以在第一步中粘贴整个区块:

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

    结束