您可以使用自定义的Sunrise.php文件执行此操作。从本质上讲,这就是域映射插件的工作方式,但是它的前端非常漂亮。对于某些定制的东西,您可以编写一些简单的PHP来完成基本上相同的事情。
多站点的本质涉及确定要服务的站点。域映射插件通过创建wp_domain_mapping表并将信息存储在其中来实现此目的。因此,当它收到对xxx.com的请求时,它会在该表中查找并看到与blog_id 123相对应。
首先,进行WordPress设置,并将其设置为多站点。不管它实际生活在哪里,因为我们将改变所有这些。为了简单起见,我将其放在blog.stackexchange.com上并使其成为子目录类型的站点(这样更容易)。创建的子目录可能是子段。/ wordpress,/ apple,/任何。
所以是的,首先,您确实是在blog.stackexchange.com/wordpress上启用了它。考虑这是您的暂存环境。创建每个站点时,您可以在此处进行处理,直到您决定打开映射。
要自己进行域映射,而无需使用插件,您可以执行以下操作:
第一步:添加define( 'SUNRISE', 'on' );
到wp-config.php文件的顶部。
第二步:在wp-content目录中创建Sunrise.php文件。首先放在<?php
顶部。
第三步:在Sunrise.php文件中,这将是您确定要加载哪个网站的逻辑。
您将基于$_SERVER[ 'HTTP_HOST' ]
变量。您如何做到这一点很容易:但是您想这样做。如果您只想编写一个正则表达式来查找'/blog\.(.*)\.stackexchange\.com/'
,然后在数据库中查找该位,则可以这样做。
由于此处使用的子条目与“子目录”相同,因此不需要单独的表。您可以只在主wp_blogs表中查找所需的站点。类似于以下内容:
$current_blog = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE path = '/wordpress/' LIMIT 1" );
拥有$ current_blog之后,您需要以下代码:
$current_blog->domain = $_SERVER[ 'HTTP_HOST' ];
$current_blog->path = '/';
$blog_id = $current_blog->blog_id;
$site_id = $current_blog->site_id;
$current_site = $wpdb->get_row( "SELECT * from {$wpdb->site} WHERE id = '{$current_blog->site_id}' LIMIT 0,1" );
$current_site->blog_id = $current_blog->blog_id;
这预定义了$ current_blog和$ current_site全局变量,而不是让WordPress的MU函数执行此操作。
这足以使站点正常运行(在将您的DNS指向它并整理出虚拟主机内容之后),但是HTML代码中使用的大多数静态URL仍然指向blog.stackexchange.com / wordpress,因为那才是真正的网站。另外,规范URL函数可能不喜欢该URL,并且也会重定向您。
为了解决这些问题,您可能还希望预定义与该站点关联的几个URL。诸如WP_SITEURL和WP_HOME之类的东西。另外,WP_CONTENT_URL,WP_PLUGIN_URL和WPMU_PLUGIN_URL。这应该涵盖大多数情况下的URL调整。
最后,您需要设置“ COOKIE_DOMAIN”。由于您可能希望在整个过程中共享登录名,因此可以将其设置为stackexchange.com,如果您不希望共享登录名,则可以将其设置为更高。
如果您想谈论将普通的stackexchange登录系统集成到WordPress中的问题,我也可以回答有关该问题的信息,但是答案会更加详细。:)
如果您需要更多帮助,请随时给我发送电子邮件。很高兴为您提供帮助:wordpress.org的otto。