WordPress obtiene el nombre de la taxonomía con slug

3 minutos de lectura

avatar de usuario
Sebastián

¿Cómo puedo obtener una identificación o nombre de taxonomía con solo el slug de taxonomía?

Supongo que estoy buscando el equivalente de get_term_by() pero para taxonomías.

Editar: debo especificar que estoy tratando de obtener la identificación fiscal de un atributo de producto de WooCommerce.

Gracias

WordPress proporciona una función para obtener la información de taxonomía de su slug.

$taxonomy_details = get_taxonomy( $slug );

Esto devolverá los detalles de la taxonomía como un objeto, que incluye las distintas etiquetas de la taxonomía. Por ejemplo, aquí está el objeto devuelto cuando se llama para la taxonomía de Categoría estándar, por ejemplo get_taxonomy( 'category' );

stdClass Object
(
    [labels] => stdClass Object
        (
            [name] => Categories
            [singular_name] => Category
            [search_items] => Search Categories
            [popular_items] => 
            [all_items] => All Categories
            [parent_item] => Parent Category
            [parent_item_colon] => Parent Category:
            [edit_item] => Edit Category
            [view_item] => View Category
            [update_item] => Update Category
            [add_new_item] => Add New Category
            [new_item_name] => New Category Name
            [separate_items_with_commas] => 
            [add_or_remove_items] => 
            [choose_from_most_used] => 
            [not_found] => No categories found.
            [menu_name] => Categories
            [name_admin_bar] => category
        )

    WordPress get taxonomy name with slug => 
    [public] => 1
    [hierarchical] => 1
    [show_ui] => 1
    [show_in_menu] => 1
    [show_in_nav_menus] => 1
    [show_tagcloud] => 1
    [show_in_quick_edit] => 1
    [show_admin_column] => 1
    [meta_box_cb] => post_categories_meta_box
    [rewrite] => Array
        (
            [hierarchical] => 1
            [slug] => category
            [with_front] => 1
            [ep_mask] => 512
        )

    [query_var] => category_name
    [update_count_callback] => 
    [_builtin] => 1
    [cap] => stdClass Object
        (
            [manage_terms] => manage_categories
            [edit_terms] => manage_categories
            [delete_terms] => manage_categories
            [assign_terms] => edit_posts
        )

    [name] => category
    [object_type] => Array
        (
            [0] => post
        )

    [label] => Categories
)

Fuente: https://codex.wordpress.org/Function_Reference/get_taxonomy

  • El slug no es lo mismo que el nombre de la taxonomía. Su ejemplo solo funciona porque resultan ser iguales en este caso particular. get_taxonomy toma un nombre de taxonomía, no un slug.

    – Hjalmar

    15 mayo 2015 a las 11:26


  • @Hjalmar Creo que el cartel original se refería a taxonomía-> nombre como babosa, y taxonomía-> etiqueta como nombre. Me enfrento al mismo problema que él con los atributos de WC.

    – David

    3 oct 2015 a las 11:50

Como la respuesta aceptada no responde a la pregunta, proporciono una respuesta aquí aunque la pregunta es muy antigua.

El tercer argumento (requerido) para get_term_by() es el nombre de la propia taxonomía, por lo que esta función no se puede utilizar.

get_taxonomies() tampoco se puede usar porque entonces tendría que hacer coincidir toda la matriz de reescritura, a la que probablemente no tenga acceso.

Entonces, la única forma que encontré fue usar la matriz privada $wp_taxonomies:

function get_tax_name_from_slug($slug){
  foreach ($wp_taxonomies as $key => $value) {
    if ($value->rewrite['slug'] === $slug){
        return $key;
    }
  }
}

Realmente espero que WordPress proporcione una forma de hacer esto sin acceder a sus estructuras de datos internas.

$args = array(
                    'post_type' => 'awards',
                    'post_status' => 'publish',
                    'posts_per_page' => 4,
                     'orderby' => 'ID',
                     'order' => 'DESC',
                    'tax_query' => array(
                        'relation' => 'AND',
                        array(
                            'taxonomy' => 'awards_categories',
                            'field' => 'slug',
                            'terms' => $award_solution
                        ),
                        array(
                            'taxonomy' => 'year',
                            'field' => 'slug',
                            'terms' => $yearvalue
                        ),
                    )
                );

cómo obtenemos esto con wp select query

<?php 
    $term = get_term_by('slug', $slug, 'category'); 
    $name = $term->name; 
    $id = $term->term_id;
?>

¿Ha sido útil esta solución?