分類法または用語を与えられて、分類法が添付されているすべての投稿タイプを引き出すことは可能ですか?
たとえば、組み込み分類法category
を知っている、またはcategory
分類法の用語が与えられているということを知っているのに、category
がpost
の分類法であることをリバースエンジニアリングする機能はありますか。
不要な情報
私は特に投稿タイプを知る必要がある分類学用語でいくつかのカスタムフィールドを使っていますが、URLの中の投稿タイプパラメータが何らかの理由でそこにない場合、私はトラブルに遭遇します。
グローバル$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
と組み合わせて、投稿タイプを反復して、それぞれに登録されている分類法を確認します。
_ 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;
}
WordPressには分類法にアクセスするための get_taxonomy()
関数があるため、グローバル変数$wp_taxonomies
を直接使用する必要はありません(バージョン2.3.0以降のコア)。 WordPress 4.7.0以降、戻り値の型は、プロパティWP_Taxonomy
を持つ $object_type
オブジェクトです。
$taxonomy = get_taxonomy( 'category' );
print_r( $taxonomy->object_type );