在Switch_to_Blog循环中未查询自定义帖子类型

时间:2019-10-25 作者:jeynon

我有一个多站点,它有一个名为“目录”的自定义帖子类型。当我浏览我的子网站并要求每个人说出自定义帖子类型时,我可以看到它。我的代码如下。

 $sites = wp_get_sites();
        foreach ( $sites as $site ) {
            echo get_blog_details($site[\'blog_id\'])->blogname."</br>";
            switch_to_blog( $site->blog_id );
               /// I am now in the site itself////

              $args = array(
                 \'public\'   => true,
                 \'_builtin\' => false // Use false to return only custom post types
              );

             $post_types = get_post_types( $args );
             print_r($post_types); //THIS RETURNS \'directory\'/////
知道我有一个名为“directory”的post类型,我用一个查询来检索post\\u type=\'directory\'的所有post来完成这个循环。

 $args = array( 
               \'post_type\' => \'directory\',
               );
              $the_query = new WP_Query( $args );
       if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
                    <h1 class="the-title"><?php the_title() ;?></h1>
                   <?php endwhile; else: ?> <p>Sorry, there are no posts to display</p> <?php endif;
                    wp_reset_query();
            restore_current_blog();
}
当我尝试将目录变量作为post类型时,这会返回“抱歉,没有要显示的帖子”。如果我只尝试post\\u type=“post”,它将只返回每个站点的第一篇帖子。这里有点不对劲,我似乎想不出来。为什么我的“目录”post\\u类型没有查询?为什么循环只在返回内容时显示第一个帖子?我第一次涉足switch\\u to\\u博客。。。。谢谢

1 个回复
SO网友:Tom J Nowell

不是这样的switch_to_blog 作品

加载WP时,它会将主题和插件加载到全局名称空间中,没有沙盒或墙。当你打电话的时候switch_to_blog, 无法将所有这些放在一边,并从另一个博客加载插件/主题。

什么switch_to_blog 不过要做的是切换所使用的数据库和内容的数据上下文。它只是不会重新加载主题/插件,而且因为帖子类型和分类是在代码中定义的,而不是在数据库中定义的,所以它们不会改变。

这意味着只会加载请求所针对的站点的主题和插件,您不能调用只存在于其他博客上的函数或引用帖子类型。因此get_post_types 将始终返回相同的设计。

要查询另一个站点有哪些帖子类型,或在该站点上下文中使用所有插件运行代码,唯一可靠的方法是发出HTTP请求,或从PHP生成WP CLI进程。

然而,这种方法是一条死胡同,不值得追求,并且基于WP如何加载代码的错误假设