在edit.php?post_type请求中一次获取多个自定义类型的帖子

时间:2011-03-24 作者:Z. Zlatev

我正在为我的主题规划一个自定义帖子类型功能,需要能够显示多个帖子类型post_type 在管理概览表中。我想这个请求可能是这样的edit.php?post_type[]=theme_slide_nivo&post_type[]=theme_slide_other. 我还没有试过,但我很有信心它不会起作用。所以,伙计们,有没有可能在不破解核心的情况下实现这样的结果?

1 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

我试过了,想知道你会遇到什么问题。以下代码允许您使用multi_post_type 参数:

add_action( \'pre_get_posts\', \'wpse12970_pre_get_posts\' );
function wpse12970_pre_get_posts( &$wp_query )
{
    if ( is_admin() && array_key_exists( \'multi_post_type\', $_GET ) ) {
        $wp_query->set( \'post_type\', $_GET[\'multi_post_type\'] );
        add_filter( \'the_posts\', \'wpse12970_the_posts\', 10, 2 );
    }
}

function wpse12970_the_posts( $posts, &$wp_query )
{
    $wp_query->set( \'post_type\', $GLOBALS[\'post_type\'] );
    return $posts;
}
第一个问题是$post_type 应为单一类型,否则其他函数会中断。因此,我们以另一个名称“走私”多个帖子类型,并在查询运行后再次删除它们。

列表顶部的计数器和自定义列仅基于一种帖子类型。如果有许多结果,分页可能会中断。

如果要这样做,应该创建自己的list类,它是WP_List_Table, 喜欢WP_Posts_List_Table 但对于多个帖子类型。因为edit.php 默认情况下加载此表,我看没有办法截取它,您应该创建自己的替换edit.php 并使用该插件。我认为这是可行的,而且可能很有趣,但工作量很大。

结束

相关推荐