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


10

从全新的网络安装开始,第一步是在单个站点安装中在wp-config.php文件中增加一行:

define( 'WP_ALLOW_MULTISITE', true );

之后,我们必须转到Tools > Network Setup,输入一些详细信息,例如网络名称和超级管理员电子邮件,最后单击按钮以运行设置。

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

  1. 向文件添加其他常量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. .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已经存在,但事实并非如此。

问题:如何表明我已经通过了网络设置的第一步,因此没有太多的开销或降低性能。


2
你不应该试图自动化一切:i.imgur.com/OoF9Md7.png
Ünsal科尔克马兹

1
令人难以置信的是,过程仍然是相同的,而越来越多的WP安装变成了多站点
JMau 2013年

@ÜnsalKorkmaz如果您看过我的配置设置,您将了解这仅是向前迈出的一步。接下来的事情:咕unt wp-config发电机。
kaiser

我不明白为什么您需要检查每个页面加载是否存在条件,然后定义常量。您正在运行一个多站点设置,或者不是。如果您正在谈论自动化WordPress设置,则可以查看类似YeoPress的信息github.com/wesleytodd/YeoPress
kingkool68 2013年

@ kingkool68容易。因为我不想每次设置网络安装时都取消注释/注释这些常量。这没有任何开销,步骤也完全没有必要。不,我不是在说自动化WP安装程序。顺便说一句:Yeoman使用Grunt来完成任务(如上所述)。
kaiser

Answers:


1

我还没有测试过,但是如果您需要找到这样的解决方案,我可能会尝试通过以下方式通过if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )在上面描述的条件中添加脚本来做到这一点:

  • 检查数据库中的{$wpdb->prefix}sitemeta表;
  • 如果不存在,则返回false;否则返回false。
  • 如果确实存在->添加WP cron作业以重写wp-config.php->返回true。

WP cron作业将重写wp-config.php以完全消除检查。

这样,在建立网络并且cron作业发挥了魔力之前,您只有一个额外的DB请求。

请注意,尽管值得努力,但是...;)


顺便说一句,脚本可以wp-config.php直接更改文件,但是我想它会在那时被锁定...
Alain Schlesser

这个cron工作的想法很有趣:)谢谢。顺便说一句,您可以编辑答案。
kaiser

-1

检查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);   
    }
}
  1. 放到mu-plugins文件夹中。
  2. 全新wp安装
  3. 转到管理面板
  4. 点击工具
  5. 单击以进行网络设置
  6. 运行设置
  7. ???
  8. 利润!!!

在此处输入图片说明


我已经检查过了。的一点是,wp-load.php在拉动wp-config.php较早,所以WP_INSTALLING_NETWORK不会被定义。但是即使可以使用,也只能在网络设置期间使用。在安装运行我该怎么做才能保留常量?
kaiser

不。您应该使用一个函数执行一次,并将您的定义一次写入wp-config.php文件。你可以认为它像register_activation_hook
Ünsal科尔克马兹

index.phppulls ./wp-blog-header.php),然后wp-load.php从中wp-config.php调用。一个概述可以在这里找到admin.php本身在setup.php和之前被调用network.php(并wp-load.php在开始时调用自身),因此config已经在运行。
kaiser

而作为WP_INSTALLING_NETWORK得到define()不检查,如果它已经是defined(),我想创建一个Fatal Error在那里。请证明我错了并进行测试。:)
kaiser

2
不,恩萨尔,我不是。我什至忽略了我可以把上面的脱口秀漫画当作拖钓或粗鲁的事实。我正在寻找解决方案。期。但是拥有可写wp-config.php文件会带来安全风险。考虑到那里所有重要的细节。我向您展示了这是行不通的(没有可写的配置文件)。我正在寻找的是一个指标(不会降低系统速度),我可以对其进行检查并用作开关。其他所有的东西都不起作用。
kaiser

-1

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

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


正如您在问题中看到的那样,我非常了解所需的常量。我正在寻找的是一个可靠的指示器,如果安装程序已经通过了步骤1,则没有其他问题。请参阅底部突出显示的实际问题。感谢您的辛勤工作。
kaiser

我的答案是挑战您是否甚至根本不需要指标,而是依靠服务器变量来提供DOMAIN_CURRENT_SITEWordPress在完成内部设置后为您提供的正确常量。
杰夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.