web-dev-qa-db-ja.com

分類タイプが関連付けられている投稿タイプを取得します。

分類法または用語を与えられて、分類法が添付されているすべての投稿タイプを引き出すことは可能ですか?

たとえば、組み込み分類法categoryを知っている、またはcategory分類法の用語が与えられているということを知っているのに、categorypostの分類法であることをリバースエンジニアリングする機能はありますか。

不要な情報

私は特に投稿タイプを知る必要がある分類学用語でいくつかのカスタムフィールドを使っていますが、URLの中の投稿タイプパラメータが何らかの理由でそこにない場合、私はトラブルに遭遇します。

10
Howdy_McGee

グローバル$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
)
11
birgire

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;
}
7
Milo

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 );
2
JHoffmann