Obtener el slug o título de categoría desde un ID de categoría

6 jul 2013, 22:16:52
Vistas: 17K
Votos: 2

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!

0
Todas las respuestas a la pregunta 1
6

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;
6 jul 2013 22:27:45
Comentarios

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 user1374796
7 jul 2013 04:32:16

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
7 jul 2013 09:17:51

@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 user1374796
7 jul 2013 12:27:51

@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 user1374796
7 jul 2013 12:30:24

@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 user1374796
7 jul 2013 12:31:42

@user1374796 : mira la edición

s_ha_dum s_ha_dum
7 jul 2013 18:07:30
Mostrar los 1 comentarios restantes