这里似乎有两件事在起作用:
在switch_to_blog()
调用不切换插件(see ticket #14941), 因此,如果您的自定义帖子类型是在插件中定义的(它们很可能是,也应该是),那么它们将不会加载到switch_to_blog()
脚本(从门票上的评论来看,这很可能不会改变。)
此外get_post_types()
使用全局变量;它不会获取在您切换到的站点中注册的CPT,而是从您开始的站点中获取列表。全局变量似乎没有更新switch_to_blog()
, 大概是因为与插件未卸载/加载的原因类似的原因switch_to_blog()
.
恐怕我不知道有没有一种简单的方法来做你想做的事。
可能的解决方法
register_post_type()
激发操作-
registered_post_type
—当它结束的时候。您应该能够使用它在给定网站上构建自定义帖子类型的列表。
类似这样的代码(非常简单,未经测试的代码):
<?php
add_action( \'registered_post_type\', \'wpse_290292_post_types\', 10, 2 );
function wpse_290292_post_types( $post_type_name, $post_type_object ) {
$post_types = get_option( \'my_prefix_post_types\', array() );
if (
! isset( $post_types[ $post_type_name ] )
|| $post_type_object !== $post_types[ $post_type_name ]
) {
// Adds the $post_type_object to the array if it\'s a) not already there or b) changed since it was added.
$post_types[ $post_type_name ] = $post_type_object;
update_option( \'my_prefix_post_types\', $post_types );
}
}
?>
这将向
*_options
桌子您可能需要添加一些检查,以防止添加
_builtin
岗位类型等。
一旦将其设置为一个支持网络的插件,您应该能够使用my_prefix_post_types
选项(可以根据需要随意重命名)。