获取附加到A类分类的帖子

时间:2014-12-18 作者:Howdy_McGee

如果给定了分类法或术语,是否可以提取该分类法所附加的任何/所有帖子类型?

例如,了解内置分类法category 或者在category 分类法,是否有一个功能可以对category 是的分类法post ?

Unneeded Info

我正在使用分类术语中的一些自定义字段,这些字段特别需要知道帖子类型,但是如果URL中的post type参数不存在,无论出于什么原因,我都会遇到麻烦。

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

如果我们窥视全球$wp_taxonomies 变量我们可以看到相关的对象类型。

可能有更好的方法来实现这一点,甚至可以实现核心功能,但您可以尝试以下方法:

function wpse_172645_get_post_types_by_taxonomy( $tax = \'category\' )
{
    global $wp_taxonomies;
    return ( isset( $wp_taxonomies[$tax] ) ) ? $wp_taxonomies[$tax]->object_type : array();
}
然后,对于默认设置,您可以获得:

$out = wpse_172645_get_post_types_by_taxonomy( \'category\' );
print_r( $out );
输出:

Array
(
    [0] => post
)

SO网友:JHoffmann

无需使用$wp_taxonomies 全局变量,因为WordPress具有get_taxonomy() 函数访问it中的分类法(自2.3.0版起,在core中)。由于WordPress 4.7.0,返回类型为WP_Taxonomy 具有属性的对象$object_type

$taxonomy = get_taxonomy( \'category\' );
print_r( $taxonomy->object_type );

SO网友:Milo

您可以使用get_object_taxonomies. 将其与get_post_types 迭代post类型以检查为每个类型注册的分类法。

EDIT- 下面的示例生成与@birgire的函数相同的输出,而不使用脏全局变量。

function wpse_172645_get_post_types_by_taxonomy( $tax = \'category\' ){
    $out = array();
    $post_types = get_post_types();
    foreach( $post_types as $post_type ){
        $taxonomies = get_object_taxonomies( $post_type );
        if( in_array( $tax, $taxonomies ) ){
            $out[] = $post_type;
        }
    }
    return $out;
}

结束