强制WordPress 3.0以子目录形式安装多站点功能

升级到WordPress 3.0之后,如果要启用其博客网络(Network)功能,通常有两种安装方式:子域名(sub-domain)子目录(sub-directory),并且安装后不能更改。如果是全新安装,你可以在安装时选择一种方式进行。但是如果你是从原来的版本升级而来,并且将WordPress安装在了主机空间根目录下,则启用Network功能时将不能选择,程序默认会以子域名形式安装博客网络。可是很多空间并不支持泛域名解析,而只能用子目录来区分每个站点,这时我们可以通过修改WordPress 3.0 源代码强制其以子目录形式安装博客网络功能。当然你也可以使用这样的方法强制以子域名方式安装博客网络功能。

对于该问题的描述请参考文章“升级到 WordPress 3.0多站点模式问题探索”,本文主要描述修改WordPress 3.0源代码使其直接以子目录形式启用Network功能的方法。

请在使用此方法前确认你已经知道了它可能造成的链接地址冲突的问题(请参考文章“升级到 WordPress 3.0多站点模式问题探索”),并有了解决办法(请参考“安全修改WordPress网站永久链接形式”),或者你确实想忽略这些可能产生的问题。

如果你希望强制以形式安装WordPress 3.0,而不管它会产生怎样的链接地址冲突,请按照以下方法进行。

你可以通过主机空间控制面板上提供的 online-file-manager (我用的是cpanel里提供的net2ftp)来直接打开文件进行编辑,也可以将其在本地使用UltraEdit、Dreamweaver等编辑器打开编辑之后再上传到主机空间上的对应位置。

该文件位于 /wp-admin/network.php。打开该文件后定位到大约行39~68的代码段。WordPress 3.0 RC1 15059 中的原始代码如下:

/**
* Allow subdomain install //允许子域名安装
*
* @since 3.0.0
* @return bool Whether subdomain install is allowed
*/
function allow_subdomain_install() {
    $domain = preg_replace( '|https?://[^/]|', '', get_option( 'siteurl' ) );
    if( false !== strpos( $domain, '/' ) || 'localhost' == $domain || preg_match( '|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|', $domain ) )
        return false;
    return true;
}
/**
* Allow subdirectory install //允许子目录安装
*
* @since 3.0.0
* @return bool Whether subdirectory install is allowed
*/
function allow_subdirectory_install() {
    global $wpdb;
    if ( apply_filters( 'allow_subdirectory_install', false ) )
        return true;
    $post = $wpdb->get_row( "SELECT ID FROM $wpdb->posts WHERE post_date < DATE_SUB(NOW(), INTERVAL 1 MONTH) AND post_status = 'publish'" );
    if ( empty( $post ) )
        return true;
    return false;
}

可以将修改为:

/**
* Allow subdomain install //允许子域名安装
*
* @since 3.0.0
* @return bool Whether subdomain install is allowed
*/
function allow_subdomain_install() {
    $domain = preg_replace( '|https?://([^/]+)|', '$1', get_option( 'siteurl' ) );
    if( false !== strpos( $domain, '/' ) || 'localhost' == $domain || preg_match( '|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|', $domain ) )
        return false;
    //由true改成false,将直接禁用子域名安装
    return false;
}
/**
* Allow subdirectory install //允许子目录安装
*
* @since 3.0.0
* @return bool Whether subdirectory install is allowed
*/
    function allow_subdirectory_install() {
global $wpdb;
    if ( apply_filters( 'allow_subdirectory_install', false ) )
return true;
    //$post = $wpdb->get_row( "SELECT ID FROM $wpdb->posts WHERE post_date < DATE_SUB(NOW(), INTERVAL 1 MONTH) AND post_status = 'publish'" );
    //if ( empty( $post ) )
        // return true;
    //任何情况均返回 true ,则总是以子目录形式安装
    return true; 
}

将修改后的代码上传到服务器就可以进入管理控制台启用网络功能了。通过“工具(Tools)——>网络(Network)”启用网络功能时将直接提示:

“Because your install is in a directory, the sites in your WordPress network must use sub-directories.

因为你的WordPress安装在一个目录中,你的网络中的站点必须使用子目录(作为链接地址)。”

这句话可以无视,因为我们是通过修改代码来强制在根目录以子目录形式安装的。如下图所示:

以子目录形式安装多站点网络的提示

该方法是肯定可行的,因为我的这个网站就已经通过这样的方式完成了升级。具体请看我的这篇文章:升级至WordPress 3.0多站点模式©

本文发表于水景一页。永久链接:<https://cnzhx.net/blog/wordpress-3-0-force-enable-sub-directory-multisite/>。转载请保留此信息及相应链接。

3 条关于 “强制WordPress 3.0以子目录形式安装多站点功能” 的评论

  1. 我今天升级到了3.0的正式版了,但是怎么升级后有中文版变成了英文版的了???

    • 正式的中文版还没出来吧,所以你升级的是英文版。如果你以前的中文版语言包还在,可以在“设置(settings)”那页的最下面设置启用中文,勉强能够显示中文界面吧。如果没在了,可以上传上去,还在原来的位置。

  2. 引用通告: 升级到WordPress 3.0多站点模式问题探索 « 不存在的空间

时间过去太久,评论已关闭。
如果您有话要说,请到讨论区留言并给出此文章链接。
谢谢您的理解 :-)