Intentando listar términos de una taxonomía personalizada usando get_categories
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.
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?
¡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
¿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>';
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
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
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
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
¿Puedes mostrar el código que usaste para la taxonomía? Agrégalo a tu pregunta
RRikesh
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
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;
?>
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
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
<?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;
?>