Obter o tipo de postagem que uma taxonomia está vinculada

10

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

Por exemplo, conhecendo a taxonomia incorporada category ou recebendo um termo na taxonomia category , existe uma função para fazer engenharia reversa que category é uma taxonomia de post ?

Informações desnecessárias

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

    
por Howdy_McGee 18.12.2014 / 18:34

3 respostas

11

Se observarmos a variável global $wp_taxonomies , vemos os tipos de objeto associados.

Pode haver maneiras melhores de fazer isso ou mesmo funções básicas, 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();
}

depois, para a configuração padrão que você recebe:

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

com a saída:

Array
(
    [0] => post
)
    
por birgire 18.12.2014 / 19:03
7

Você pode fazer o inverso com get_object_taxonomies . Combine-o com get_post_types para iterar 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 do @ birgire, sem usar globals 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;
}
    
por Milo 18.12.2014 / 19:01
1

Não é necessário usar a variável global $wp_taxonomies diretamente, pois o WordPress tem o get_taxonomy() função para acessar taxonomias nele (no núcleo desde a versão 2.3.0). Desde o WordPress 4.7.0, o tipo de retorno é um objeto WP_Taxonomy com a propriedade $object_type

$taxonomy = get_taxonomy( 'category' );
print_r( $taxonomy->object_type );
    
por JHoffmann 08.10.2018 / 22:47