在我的多站点Wordpress安装的子域中加载WP环境的最佳方式是什么?

时间:2011-02-23 作者:Greg

我有一个WP multisite的子文件夹安装,比如说在“domain.com”。

我现在需要在域的子域中加载WP环境。例如“sub1.domain.com”、“sub2.domain.com”。。。“subN.domain.com”。请注意,这些子域与WP博客不对应。但我确实需要访问登录的用户、数据库等。

我已经设置了通配符子域来加载一个php文件,该文件将显示我对任何特定子域所需的内容,并且我在该文件的早期包含了“wp load.php”。问题是,在“ms settings.php”的第99行附近,它重定向到站点的主页面,因为$\\u SERVER[‘HTTP\\u HOST’]是子域,而不是主站点域。

那么,如何在非博客子域中正确加载WP环境呢?

我有一个可以工作的原型,但我担心我正在做的事情的副作用,如果熟悉核心的人能参与进来,那就太好了。

我所做的是在包含“wp load”之前,适当地预填充$current\\u站点和$current\\u blog globals。然后,“ms设置”不会尝试创建这些设置,也不会命中检测子域并重定向到首页的代码路径。

我现在可以访问成员信息(例如使用“get\\u userdata”)和$wpdb。

这似乎是一种合理的方法吗?

4 个回复
最合适的回答,由SO网友:Otto 整理而成

使用定义使其选择要选择的站点。

您可以定义这四个来正确设置$current\\u site值:DOMAIN\\u current\\u site、PATH\\u current\\u site、site\\u ID\\u current\\u site、BLOG\\u ID\\u current\\u site。

如果在ms load中检查wpmu\\u current\\u site()函数。php,您将看到它使用这些创建$current\\u site global。

您可能需要也可能不需要手动填充$current\\u blog global。不确定。试试看。

所以,实际上,您所要做的就是在调用wp-load之前添加类似的内容。php:

define( \'DOMAIN_CURRENT_SITE\', \'example.com\' );
define( \'PATH_CURRENT_SITE\', \'/\' );
define( \'SITE_ID_CURRENT_SITE\', 1 );
define( \'BLOG_ID_CURRENT_SITE\', 1 );
为您的主要示例使用正确的值。当然是网站。

如果您不想将这些文件放在子域的php文件中,那么您可以在wp配置中执行类似操作。php或日出。php文件(当然,如果您在wp-config.php中也将SUNRISE定义为true)。

if ( $_SERVER[\'HTTP_HOST\'] == \'sub1.example.com\' || 
     $_SERVER[\'HTTP_HOST\'] == \'sub2.example.com\') {
    define( \'DOMAIN_CURRENT_SITE\', \'example.com\' );
    define( \'PATH_CURRENT_SITE\', \'/\' );
    define( \'SITE_ID_CURRENT_SITE\', 1 );
    define( \'BLOG_ID_CURRENT_SITE\', 1 );
}
这正是sunrise文件加载的目的,它允许您手动覆盖这样的内容。使用sunrise的优势。php over wp config。php的好处是(它也可以工作)您可以在其他地方轻松地打开和关闭sunrise,用于测试和调试等。

SO网友:konus

你可以试试看Wordpress Mu Domain Mapping 插件。

Update

实际上,它更符合您的要求,包括wp-blog-header.php 在子域的php文件的顶部,因此您还可以加载模板函数。

    include(dirname(__FILE__) . "/../path_to_my_blog/wp-blog-header.php");
或者你可以wp_redirect 包括之后wp-load.php

SO网友:Dunhamzzz

我正在尝试与此问题中所问的相同的事情,并且无法绕过重定向,直到我在包含wp load之前欺骗了$\\u服务器变量。php:

define(\'WP_USE_THEMES\', false);
define( \'DOMAIN_CURRENT_SITE\', $siteRow[\'domain\'] );
define( \'PATH_CURRENT_SITE\', \'/\' );
define( \'SITE_ID_CURRENT_SITE\', 1 );
define( \'BLOG_ID_CURRENT_SITE\', $siteRow[\'wp_blog_id\'] );

$_SERVER = array(
    "HTTP_HOST" => $siteRow[\'domain\'],
    "SERVER_NAME" => $siteRow[\'domain\'],
    "REQUEST_URI" => "/",
    "REQUEST_METHOD" => "GET"
);
$siteRow数组是我自己的站点配置,请根据需要更新变量。无重定向,所有可湿性粉剂功能可供您使用!享受

SO网友:andxyz

我当前使用switch语句设置DOMAIN\\u CURRENT\\u站点

我将其设置为在实时服务器上部署时工作。当我在本地开发机器上工作时,该开关还会设置DOMAIN\\u CURRENT\\u站点。(因此,所有.dev顶级域)

在switch语句之后,我定义了其他不变但与多站点相关的内容。

switch ($_SERVER[\'SERVER_NAME\']) {
    case \'sub1.mydomain.com\':
    case \'sub2.mydomain.com\':
    case \'community.mydomain.com\':
        define(\'DOMAIN_CURRENT_SITE\', \'community.mydomain.com\');
        break;
    case \'sub1.mydomain.dev\':
    case \'sub2.mydomain.dev\':
    case \'community.mydomain.dev\':
        define(\'DOMAIN_CURRENT_SITE\', \'community.mydomain.dev\');
        break;
    default:
        define(\'DOMAIN_CURRENT_SITE\', \'community.mydomain.com\');
        break;
}

define(\'WP_ALLOW_MULTISITE\', true);
define(\'MULTISITE\', true);
define(\'SUBDOMAIN_INSTALL\', true);
define(\'PATH_CURRENT_SITE\', \'/\');
define(\'SITE_ID_CURRENT_SITE\', 1);
define(\'BLOG_ID_CURRENT_SITE\', 1);
当然,这是wp配置。php文件中有更多设置,但我没有包括这些设置,因为它们不是特定于WP多站点安装的。

注意:在本地工作时(下载最新的sql文件后。我需要在数据库上执行大量的搜索替换操作,这与您的特定问题略微无关,但我将在下面留下wp-cli.org片段)

wp search-replace \'community.mydomain.com\' \'community.mydomain.dev\' --network --dry-run
wp search-replace \'sub1.mydomain.com\' \'sub1.mydomain.dev\' --network --dry-run
wp search-replace \'sub2.mydomain.com\' \'sub2.mydomain.dev\' --network --dry-run

结束

相关推荐

导入到WordPress MultiSite时禁用HTML过滤

我正在迁移到WordPress多站点实例的许多站点都在帖子中嵌入了视频和iFrame。我宁愿禁用WordPress功能,在导入时去掉嵌入的内容,而不是将每篇文章转换为犹太教式的视频嵌入方式。编辑帖子时禁用剥离是as simple as disabling the kses filter. 不幸的是,我不知道导入帖子需要禁用什么。目前我怀疑wp\\u insert\\u post()方法,但没有缩小过滤器的范围。有什么想法吗?Update: 这是特定于WordPress Multisite的。导入到单个Wo