你可以通过定制的日出来实现这一点。php文件。这基本上就是域映射插件的工作方式,但是它有一个很好的前端。对于自定义的东西,您可以编写一些简单的PHP来完成基本相同的事情。
multisite的本质是确定要为哪个站点提供服务。域映射插件通过创建wp\\u Domain\\u映射表并将信息存储在其中来实现这一点。因此,当它收到xxx的请求时。com,它在该表中查找,并看到它对应于blog\\u id 123。
首先,进行WordPress设置,并使其成为多站点。不管它真正生活在哪里,因为我们将改变这一切。为了简单起见,我把它放在博客上。stackexchange。com并使其成为子目录类型的站点(这些站点更容易)。创建的子目录可能是slug/wordpress,/苹果,/随便什么。
所以,是的,首先,你确实在博客上直播。stackexchange。com/wordpress。将此视为您的暂存环境。创建每个站点时,可以在此处对其进行操作,直到您决定打开映射为止。
要自己进行域映射,在没有插件的情况下,可以执行以下操作:
第一步:添加define( \'SUNRISE\', \'on\' );
到wp配置的顶部。php文件。
第二步:创建日出。wp内容目录中的php文件。放<?php
从顶部开始。
第三步:在日出时。php文件将是您确定加载哪个站点的逻辑。
你要根据$_SERVER[ \'HTTP_HOST\' ]
变量如何做到这一点很简单:不管你想怎么做。如果你想写一个正则表达式\'/blog\\.(.*)\\.stackexchange\\.com/\'
然后在数据库中查找该位,您可以这样做。
因为这里使用的是与“子目录”相同的slug,所以不需要单独的表。您只需查看wp\\u blogs主表即可找到所需的站点。类似于此:
$current_blog = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE path = \'/wordpress/\' LIMIT 1" );
拥有$current\\u博客后,需要以下代码:
$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\\u blog和$current\\u site全局变量,而不是让WordPress的MU函数来实现。
这将足以让站点正常运行(在让DNS指向它并整理好虚拟主机之后),但是HTML代码中使用的大多数静态URL仍然指向博客。stackexchange。com/wordpress,因为这才是网站真正的位置。此外,规范URL函数可能不喜欢URL,也会重定向您。
为了解决这些问题,您可能还需要预定义几个与站点关联的URL。像WP\\u SITEURL和WP\\u HOME之类的东西。此外,还有WP\\u CONTENT\\u URL、WP\\u PLUGIN\\u URL和WPMU\\u PLUGIN\\u URL。这应该涵盖正在调整的URL的大多数情况。
最后,您需要设置“COOKIE\\u域”。由于您可能希望在整个过程中共享登录名,因此可以将其设置为stackexchange。com或更高版本,如果您不想让它们成为共享登录。
如果您想讨论将普通的stackexchange登录系统集成到WordPress中,我也可以回答有关这方面的问题,但答案会更详细一些。:)
如果您需要更多帮助,请随时给我发电子邮件。很高兴协助:wordpress的奥托。组织。