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?
user1374796
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
@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.
user1374796
@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 :(
user1374796
@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?
user1374796