Obtener el slug o título de categoría desde un ID de categoría
Tengo un campo personalizado configurado que devuelve el ID de una categoría seleccionada. Necesito usar este ID de categoría para mostrar, en un caso: el slug de la categoría, y en otro caso: el título de la categoría.
El campo se llama simplemente así: <?php the_field('category_test'); ?>
y devuelve el ID, en este caso 4
.
¿Es posible usar este campo para devolver el slug de la categoría, y también usarlo para devolver el título de la categoría? No estoy seguro de cómo o si esto se puede hacer. ¡Cualquier sugerencia sería muy apreciada!

get_category
devolverá toda la información que necesitas para ambos casos.
$catinfo = get_category(get_field('category_test'));
Según el Codex, eso te dará (datos de ejemplo obviamente):
stdClass Object ( [term_id] => 85 [name] => Nombre de Categoría [slug] => nombre-de-categoria [term_group] => 0 [term_taxonomy_id] => 85 [taxonomy] => category [description] => [parent] => 70 [count] => 0 [cat_ID] => 85 [category_count] => 0 [category_description] => [cat_name] => Nombre de Categoría [category_nicename] => nombre-de-categoria [category_parent] => 70 )
Estoy bastante seguro de que get_field
es correcto.
get_category
funciona correctamente para cada ID de categoría que he probado, y devuelve NULL
para IDs de categoría inválidos. Pero según la discusión a continuación, get_field
puede devolver un array. Cuando esto ocurre, get_category
parece devolver la primera categoría en la base de datos por ID, que por defecto es la categoría uncategorized
. Esto se puede demostrar con lo siguiente:
var_dump(get_category(array(8,9,10)));
Por lo tanto, para compensar necesitarás:
$cat_field = get_field('category_test');
if (is_array($cat_field)) {
$cat_field = $cat_field[0];
}
$catinfo = get_category($cat_field);
Para obtener cualquier campo específico solo usa la sintaxis estándar de objetos. Por ejemplo:
echo $catinfo->slug;
O
$cname = $catinfo->name;

ah esto casi funciona, aunque por alguna razón está devolviendo un array para la categoría Uncategorized
, a pesar de que el ID que se pasa es de otra categoría?

ACF puede devolver un array de valores especialmente cuando estás usando campos de taxonomía. Probablemente necesites usar algo como $category = get_field('category_test');
y luego $catinfo = get_category( $category[0] );

@RRikesh Esto no parece devolver nada? El método anterior devuelve un array, pero no para la categoría correcta, sólo muestra Uncategorized
por alguna razón.

@RRikesh También he probado function get_cat_slug($cat_id) {
$cat_id = (int)$cat_id;
$category = &get_category($cat_id);
return $category->slug;
}
en functions.php y <?php echo get_cat_slug(get_field('category_test')); ?>
en la página de prueba y aunque el campo category_test
devuelve el ID 4
, el slug que se está devolviendo es el de la categoría uncategorized
nuevamente :(

@s_ha_dum
ah esto casi funciona, aunque por alguna razón está devolviendo un array para la categoría Uncategorized, a pesar de que el ID que se está pasando es de otra categoría?
