获得分类或术语后,是否可以提取该分类所附加的任何/所有职位类型?
例如,了解内置分类法category
或在分类法中被赋予术语category
,是否有一项功能可以反向工程category
为分类法的post
?
不需要的信息
我正在使用分类术语中的一些自定义字段,这些字段特别需要知道帖子类型,但是如果由于某种原因,URL中的帖子类型参数不存在,则会遇到麻烦。
获得分类或术语后,是否可以提取该分类所附加的任何/所有职位类型?
例如,了解内置分类法category
或在分类法中被赋予术语category
,是否有一项功能可以反向工程category
为分类法的post
?
不需要的信息
我正在使用分类术语中的一些自定义字段,这些字段特别需要知道帖子类型,但是如果由于某种原因,URL中的帖子类型参数不存在,则会遇到麻烦。
Answers:
如果我们查看全局$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
)
您可以使用进行相反的操作get_object_taxonomies
。与之结合使用get_post_types
以遍历员额类型,以检查为每种员额注册的分类法。
编辑 -这是一个示例,该示例在不使用脏全局变量的情况下产生与@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;
}
无需$wp_taxonomies
直接使用全局变量,因为WordPress具有get_taxonomy()
访问其中的分类法的功能(自2.3.0版以来为核心)。从WordPress 4.7.0开始,返回类型是WP_Taxonomy
具有属性的对象$object_type
$taxonomy = get_taxonomy( 'category' );
print_r( $taxonomy->object_type );