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!

¿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

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

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?

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

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

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.

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
:-)

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