我有一个带有子域的网络多站点设置。看起来像这样
example.com <--- (this is the main site)
sub1.example.com <--- (subdomain 1 of the main site)
sub2.example.com <--- (subdomain 2 of the main site)
example.net <--- (note that the .net instead of .com, however this is still one of the sites in the network)
我正在创建一个网络插件。此插件无法在站点管理区域激活,但只能在网络管理区域激活。这是通过以下方式实现的
Network: true 如上所述
here现在,在该插件中,我通过API调用创建页面,通过wp_insert_post()
. 但是,我希望这些页面特定于某个子域。例如,我喜欢创建一个只能在中看到的页面sub2.example.com
. 我如何才能做到这一点?我在文档中找不到任何东西wp_insert_post()
这有助于指定在其中创建页面的子域。
代码如下:
/*
Plugin Name: Awesome Plugin
Version: 1.0
Network: true
*/
function create_pages_for_my_network () {
// Add the page using the data from the array above
wp_insert_post(
array(
\'post_name\' => \'page-1\',
\'post_title\' => \'Page 1\',
\'post_content\' => \'Blah blah\',
\'post_status\' => \'publish\',
\'post_type\' => \'page\',
\'ping_status\' => \'closed\',
\'comment_status\' => \'closed\',
)
);
}
add_action(\'init\', \'create_pages_for_my_network\');
Important Note 我正在使用动作
init
仅用于测试目的。在这种情况下,我正在刷新network admin部分,以实现对
create_pages_for_my_network()
功能
当wp_insert_post()
调用时,页面仅在主站点中创建(在这种情况下,example.com
). 如何指定要将页面添加到哪个网站?例如,如何将页面添加到example.net
从网络管理部分?
另一方面,这里有一个相关的问题。如何从网络级别向数据库添加特定于该子域的表?换句话说,这些表将具有该特定子域的前缀。
谢谢
最合适的回答,由SO网友:Tom J Nowell 整理而成
您找不到指定域的选项,因为没有域,这不是多站点的工作方式。功能始终在当前站点上运行。如果您在WP Admin中,那么该站点就是WP Admin所针对的站点。
此外,该插件将在所有站点上运行,因此如果您的代码按照您认为的方式工作,并且您有5个站点,那么您将获得5个重复页面。
最后,您的原样代码将针对每个请求创建一个页面。AJAX请求、cron作业、restapi端点等。只要处于编辑后屏幕中,就会从WP心跳机制创建一个页面。
因此,有几件事需要注意:
不在上创建页面init
或admin_init
在站点创建或插件激活时创建页面仅当您位于要在其上创建页面的站点时创建页面您可以使用switch_to_blog
并传递站点ID,然后restore_current_blog
但请记住,这并不能避免我上面指出的复制错误。所以要点是:
if ( on the site I want it on ) {
create the page
}
因此,抓取当前主页,检查是否使用标准字符串比较,例如:
if ( site_url() == \'https://example.com\' )
否则,如果您已经知道页面内容,并且已经知道它在哪个域上运行,那么当您可以在WP Admin中编写它时,为什么还要在代码中编写它呢?你这样做似乎毫无意义(除非你还有更多问题没有告诉我们)