有没有如果多站点有帖子功能?

时间:2014-11-07 作者:Maarten Heideman

我需要一个函数来检查posttype“events”是否在网络中的所有多站点网站中都有帖子如果为false,则不执行任何操作如果为true,则返回cross\\u events();作用

1 个回复
SO网友:Sisir

没有,但你可以使用switch_to_blog() 函数切换到某个站点,然后使用常规WordPress函数检查该帖子类型上是否存在任何帖子。

例如

add_action(\'wp_loaded\', \'wpse167721_check_networkwide_events\');

function wpse167721_check_networkwide_events(){
    global $wpdb;
    $original_blog_id = get_current_blog_id(); // get the original blog id

    // get network sites
    $args = array(
        \'network_id\' => $wpdb->siteid,
        \'public\'     => null,
        \'archived\'   => null,
        \'mature\'     => null,
        \'spam\'       => null,
        \'deleted\'    => null,
        \'limit\'      => 100,
        \'offset\'     => 0,
    );
    $sites = wp_get_sites($args);

    foreach($sites as $site){
        // switch to blog
        switch_to_blog($site[\'blog_id\']);

        if(!wpse167721_is_event_exists())
            continue; // skip current iteration and go to the next one

        // Event exists! do whatever you want to do

    }

  // lets switch to our original blog
  switch_to_blog($original_blog_id);

}


function wpse167721_is_event_exists(){
    $args = array(
        \'post_type\' => \'event\', // change the cpt name here
        \'posts_per_page\' => 1,
        \'fields\' => \'ids\'
    );

    return count(get_posts($args));
}
Caution:此代码将在每次页面加载时为网络中的每个博客运行(因为它连接到wp_loaded). 如果您有一个大型网络,那么可以考虑批处理。

代码未测试

结束

相关推荐

Multisite Widget/Content

我正在使用WordPress multisite,需要在侧边栏中显示所有子网站的内容。这是一个由50多个站点组成的网络,因此每隔几天用此内容更新所有50多个侧栏是不现实的。我找到的一个解决方案是简单地将我想要的内容插入侧边栏。虽然我不希望我的客户机编辑这个文件,但我希望他们使用TinyMCE编辑器而不是HTML。另一个想法是在每个子网站中嵌入一个iframe,让我的客户端更新iframe引用的页面。我的最后一个想法是用TinyMCE编辑器创建一个插件,将代码注入侧栏。php文件保存时,虽然我不知道插件是否