仅获取基于支持的帖子类型

时间:2018-01-15 作者:Cyclonecode

我正在尝试检索包含内置和自定义帖子类型的列表:

$post_types = get_post_types(array(
  \'public\' => TRUE,
), \'objects\');
以上几乎都是可行的,但我想排除attachment 从该列表中,仅返回具有特定支持的帖子类型,例如editor, titlethumbnail. 这可能吗?

3 个回复
最合适的回答,由SO网友:Cyclonecode 整理而成

我发现了get_post_types_by_support() 似乎是获得预期结果的解决方案:

$post_types = get_post_types_by_support(array(\'title\', \'editor\', \'thumbnail\'));
以上内容将返回post, page 以及任何支持title, editorthumbnail.

由于这也将返回私有帖子类型,因此我们可以循环浏览列表并检查该类型是否在前端可见。这可以通过使用is_post_type_viewable() 功能:

foreach ($post_types as $key => $post_type) {
  if (!is_post_type_viewable($post_type)) {
    unset($post_types[$post_type]);
  }
}

SO网友:cybmeta

get_post_types() 接受参数数组以匹配post type object. 因此,您可以这样做(未经测试):

$post_types = get_post_types(array(
  \'public\'   => true,
  \'supports\' => array( \'editor\', \'title\', \'thumbnail\' )
), \'objects\');
不幸的是,您不能在此函数中设置“exclude”之类的内容,而且您只能获得支持exactly \'editor\', \'title\', \'thumbnail\', 不多也不少。

或者你可以使用get_post_types_by_support() (仅适用于WP 4.5及更高版本。此外,请注意,您也不能使用此功能排除特定的帖子类型,但对于支持editor, title, thumbnail, 在大多数情况下,附件桩类型将被排除在外)。

$post_types = get_post_types_by_support( array( \'editor\', \'title\', \'thumbnail\' ) );
如果您希望在任何情况下都能工作,我会尝试以更广泛的标准来获取帖子类型,然后构建您自己的数组,如下所示:

$_post_types = get_post_types_by_support( array( \'editor\', \'title\', \'thumbnail\' ) );

$post_types = [];

foreach($_post_types as $post_type) {
    // In most cases, attachment post type won\'t be here, but it can be
    if( $post_type->name !== \'attachment\' ) {
        $post_types[] = $post_type;
    }
}

SO网友:Will

解决OP问题的最简单方法是从返回的数组中取消设置“附件”;

$post_types = get_post_types(array(\'public\' => TRUE,), \'objects\');
unset($post_types[\'attachment\']);
虽然没有其他解决方案那么优雅,但它的开销最小。

结束

相关推荐