Intentando listar términos de una taxonomía personalizada usando get_categories

14 ago 2013, 13:13:23
Vistas: 19K
Votos: 3

Estoy usando este pequeño fragmento de código para intentar listar los términos de una taxonomía personalizada para usarlos en un cuadro de selección de metabox, pero no muestra nada cuando lo implemento (a pesar de funcionar con la taxonomía predeterminada 'category').

$partners = array();
$partners_obj = get_categories(array('taxonomy' => 'partner-cat'));
$partners[''] = '-';
foreach ($partners_obj as $partner) {
    $partners[$partner->cat_ID] = $partner->cat_name;;
}

Como puedes ver, mi taxonomía personalizada es 'partner-cat' y hay publicaciones en un tipo de contenido personalizado en 2 términos separados de esta taxonomía.

Cualquier ayuda sería muy apreciada.

0
Todas las respuestas a la pregunta 5
2
get_categories()

obtiene taxonomías de tipo 'categorías' específicamente http://core.trac.wordpress.org/browser/tags/3.6/wp-includes/category.php#L0, para obtener taxonomías personalizadas debes usar get_terms() en su lugar, aquí http://codex.wordpress.org/Function_Reference/get_terms

$terms = get_terms( 'partner-cat', 'orderby=count&hide_empty=0' );
$count = count($terms);
if ( $count > 0 ){
 echo "<ul>";
 foreach ( $terms as $term ) {
   echo "<li>" . $term->name . "</li>";
 }
 echo "</ul>";
}

Asegúrate de especificar el slug correcto que registraste para la taxonomía y cambia WP_DEBUG a true en tu archivo de configuración para verificar posibles errores, ya que podrías estar intentando obtener la taxonomía antes de registrarla y en ese caso no obtendrías resultados y aparecería un error.

¿Puedes pegar tu código para registrar la taxonomía?

14 ago 2013 13:53:19
Comentarios

¡Ni siquiera lo había pensado! Estaba incluyendo la función del meta box ANTES de mi función de taxonomía personalizada. Los cambié de orden y ahora funciona perfectamente. ¡Gracias!

Poisontonomes Poisontonomes
14 ago 2013 14:01:03

ok genial... :), solución fácil, así que deberías marcarlo como respuesta, supongo :P

Kumar Kumar
14 ago 2013 14:02:02
8

¿Tus términos de taxonomía están vacíos? Por defecto no se mostrarán. Podrías intentar usando:

$partners_obj = get_terms( 'partner-cat', array('hide_empty' => false) );

Ten en cuenta que get_categories() utiliza get_term() para obtener tus términos.

Tu foreach tampoco es correcto. Deberías acceder a term_id y name en su lugar.

foreach ($partners_obj as $partner) {
    $partners[$partner->term_id] = $partner->name;
}

Código completo:

$partners = array();

$partners_obj =  get_terms( 'taxo-name-here', array('hide_empty' => false) );
echo '<pre>' . print_r( $partners_obj, true ) . '</pre>';
echo '<hr>';
$partners[''] = '-';
foreach ($partners_obj as $partner) {
    $partners[$partner->term_id] = $partner->name;;
}

echo '<pre>' . print_r( $partners, true ) . '</pre>';
14 ago 2013 13:37:15
Comentarios

No, ambos tienen publicaciones. get_terms( 'partner-cat', array('hide_empty' => false) ); tampoco funcionó... Es extraño porque funciona bien con las categorías predeterminadas de publicaciones

Poisontonomes Poisontonomes
14 ago 2013 13:39:06

Respuesta actualizada. Funciona para mí.

RRikesh RRikesh
14 ago 2013 13:43:57

Lo intenté y aún no funciona, aunque mostró un error diciendo que la taxonomía era inválida... He verificado dos y tres veces el nombre y es correcto, así que no sé por qué está pasando esto

Poisontonomes Poisontonomes
14 ago 2013 13:52:57

get_terms devuelve wP_Error cuando la taxonomía no existe. ¿Podrías intentar con otra taxonomía? ¿Cómo estás creando esta? ¿Con código o un plugin?

RRikesh RRikesh
14 ago 2013 13:55:45

Acabo de probar con otra taxonomía personalizada, mismo error. Luego intenté con la taxonomía predeterminada "category" y funcionó. Ambas taxonomías personalizadas existen y ambas tienen publicaciones... Lo estoy codificando manualmente, sin plugin

Poisontonomes Poisontonomes
14 ago 2013 13:58:11

¿Puedes mostrar el código que usaste para la taxonomía? Agrégalo a tu pregunta

RRikesh RRikesh
14 ago 2013 13:59:26

Lo arreglé. Al final era una solución sencilla, @dot1 me llevó a verificar qué función estaba obteniendo primero y todo lo que tuve que hacer fue poner mi función de taxonomía personalizada primero y ahora todo funciona como debería. Gracias por tu ayuda.

Poisontonomes Poisontonomes
14 ago 2013 14:02:25

¿No estás enganchando tus funciones? Me alegro de que funcionara :)

RRikesh RRikesh
14 ago 2013 14:03:24
Mostrar los 3 comentarios restantes
2

Si estás utilizando Tipos de Entradas Personalizados (CPT) y asumo que has creado una taxonomía personalizada para ese tipo de entrada personalizada, digamos:

Tienes un CPT llamado Productos y tienes una CPTaxonomía llamada Categorías de Productos.

Si estás intentando mostrar la CPTaxonomía en tu página de productos en algún lugar dentro del loop, te sugiero usar esta función según el Codex de WP:

http://codex.wordpress.org/Function_Reference/get_terms

El código para obtener la CPTaxonomía para el CPT ambos llamados productos debería ser el siguiente:

$categories = get_terms( 'products', 'orderby=count&hide_empty=0' );

Luego, para mostrar las taxonomías usa este código:

<?php foreach($categories as $category):
 print $category->slug;print $category->name; 
?>
31 mar 2015 13:21:24
Comentarios

Solo un consejo, es mejor usar variables como $terms y $term cuando trabajes con funciones relacionadas con términos como get_terms. Es menos confuso que usar una variable como $categories :-)

Pieter Goosen Pieter Goosen
31 mar 2015 13:25:53

@PieterGoosen Lo sé :), por eso cambié mis variables de $terms a $categories :)

Mile Milosheski Mile Milosheski
1 abr 2015 16:08:21
0

La forma de Wordpress:

$categories = (array) get_terms('partner-cat', array('hide_empty' => false));
foreach (array_keys($categories) as $k)
{
    _make_cat_compat($categories[$k]);
}

Esto utiliza la implementación directa que Wordpress usa en la función get_categories() ubicada en wp_includes\category.php

30 sept 2015 18:20:50
1
            <?php
                $args = array(
                    'type' =>'',//opcional
                    'number' => '',
                    'hide_empty' => 0,
                    'taxonomy'  => 'product_cat' //nombre de tu taxonomía personalizada
                ); 
                $categories = get_categories($args); 
                //echo "<pre>";   print_r($categories);
                foreach($categories as $cat){
                    $catid = $cat->term_id;                 
                    $thumbnail_id = get_woocommerce_term_meta($catid, 'thumbnail_id', true );
                    $image = wp_get_attachment_url( $thumbnail_id );
                    $catname = $cat->name;
                    $catpage = $cat->slug;
                ?>
24 ago 2016 15:05:21
Comentarios

Si bien compartir el código fuente para responder la pregunta es útil, también es útil dar una explicación. ¿Podrías por favor responder cómo este código ayuda?

Ethan Rævan Ethan Rævan
24 ago 2016 15:14:32