网络插件为不同的子域创建页面

时间:2019-05-01 作者:Greeso

我有一个带有子域的网络多站点设置。看起来像这样

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 从网络管理部分?

另一方面,这里有一个相关的问题。如何从网络级别向数据库添加特定于该子域的表?换句话说,这些表将具有该特定子域的前缀。

谢谢

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

您找不到指定域的选项,因为没有域,这不是多站点的工作方式。功能始终在当前站点上运行。如果您在WP Admin中,那么该站点就是WP Admin所针对的站点。

此外,该插件将在所有站点上运行,因此如果您的代码按照您认为的方式工作,并且您有5个站点,那么您将获得5个重复页面。

最后,您的原样代码将针对每个请求创建一个页面。AJAX请求、cron作业、restapi端点等。只要处于编辑后屏幕中,就会从WP心跳机制创建一个页面。

因此,有几件事需要注意:

不在上创建页面initadmin_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中编写它时,为什么还要在代码中编写它呢?你这样做似乎毫无意义(除非你还有更多问题没有告诉我们)

    相关推荐

    Pagespeed Error in Nginx

    我当前在mod\\u pagespeed和pagespeed中遇到问题。由于文件名后面有一个附加数组,因此无法加载图像/文件。WP站点名称/WP内容/文件名。png。pagespeed.ce.uVV-0JsmxC.png<通过遵循路径名,结果是</我尝试了两种解决方案-清除缓存,然后重新上载图像文件。通过在我的媒体(WP)中选中它,图像url为sitename/WP content/filename。png,这是正确的删除并停用WP最快缓存,但仍不工作,我的网站版本当前为4.7.13。