Obter o tipo de postagem ao qual uma taxonomia está anexada


13

Sendo dada uma taxonomia ou termo, é possível extrair qualquer / todos os tipos de postagem aos quais a taxonomia está vinculada?

Por exemplo, conhecendo a taxonomia embutida categoryou recebendo um termo na categorytaxonomia, existe uma função de engenharia reversa que categoryé uma taxonomia de post?

Informações desnecessárias

Estou trabalhando com alguns campos personalizados em termos de taxonomia que precisam especificamente conhecer o tipo de postagem, mas se o parâmetro de tipo de postagem na URL não estiver lá por qualquer motivo, eu tenho problemas.

Respostas:


12

Se espiarmos a $wp_taxonomiesvariável global , veremos os tipos de objetos associados.

Pode haver maneiras melhores de fazer isso ou até mesmo das principais funções, mas você pode tentar o seguinte:

function wpse_172645_get_post_types_by_taxonomy( $tax = 'category' )
{
    global $wp_taxonomies;
    return ( isset( $wp_taxonomies[$tax] ) ) ? $wp_taxonomies[$tax]->object_type : array();
}

para a configuração padrão, você obtém:

$out = wpse_172645_get_post_types_by_taxonomy( 'category' );
print_r( $out );

com a saída:

Array
(
    [0] => post
)

8

Você pode fazer o contrário com get_object_taxonomies. Combine-o com get_post_typespara iterar sobre os tipos de postagem para verificar as taxonomias registradas para cada um.

EDIT - Aqui está um exemplo que produz a mesma saída que a função @ birgire, sem usar globos sujos.

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

3

Não há necessidade de usar a $wp_taxonomiesvariável global diretamente, pois o WordPress tem a get_taxonomy()função de acessar taxonomias (no núcleo desde a versão 2.3.0). Desde o WordPress 4.7.0, o tipo de retorno é um WP_Taxonomyobjeto com a propriedade$object_type

$taxonomy = get_taxonomy( 'category' );
print_r( $taxonomy->object_type );
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.