Cómo obtener el Slug de categoría principal de la publicación actual

11

Mi tema tiene un estilo por categoría utilizando el siguiente código, que inserta la barra de la categoría actual como una clase de CSS.

<div class="CategorySpecificStyle 
    <?php $category = get_the_category(); echo $category[0]->slug; ?>">
        <?php echo $category[0]->cat_name; ?>
</div> 

Ahora estoy a punto de agregar una gran cantidad de nuevas subcategorías, y parece tonto agregarlas todas en CSS cuando debería poder seleccionar la categoría principal de la publicación actual y aplicarle estilos.

He podido obtener el nombre de la categoría principal:

$parentcat = get_cat_name($category[0]->category_parent);

Pero los espacios (y las mayúsculas) son un problema ... Y parece que no puedo obtener la babosa de la categoría principal.

Sé que probablemente me esté perdiendo un paso simple en algún lugar, pero cualquier información sería muy apreciada.

    
pregunta DLR 25.01.2014 - 22:40

3 respuestas

15

Deberá usar el valor de ID devuelto por $category[0]->category_parent y pasarlo por get_term() . Ejemplo:

$category = get_the_category(); 
$category_parent_id = $category[0]->category_parent;
if ( $category_parent_id != 0 ) {
    $category_parent = get_term( $category_parent_id, 'category' );
    $css_slug = $category_parent->slug;
} else {
    $css_slug = $category[0]->slug;
}
    
respondido por el Rachel Baker 25.01.2014 - 23:28
5

Deberá consultar los datos de la categoría principal. get_category está diseñado para hacer eso.

$category = get_the_category(); 
$parent = get_category($category[0]->category_parent);
echo $parent->slug;

Eso devolverá el padre inmediato de la categoría. Se le da a este conjunto de categorías:

  • caricatura
    • perro
      • Scooby

El código anterior devolverá "Perro" si le das la ID de "Scooby". Si desea la categoría superior para padres: "Caricatura": no importa qué tan profundo sea el anidamiento, use algo como esto:

$category = get_the_category(); 
$parent = get_ancestors($category[0]->term_id,'category');
if (empty($parent)) {
  $parent[] = array($category[0]->term_id);
}
$parent = array_pop($parent);
$parent = get_category($parent); 
if (!is_wp_error($parent)) {
  var_dump($parent);
} else {
  echo $parent->get_error_message();
}

Eso también tiene la ventaja de un manejo de errores relativamente ordenado.

    
respondido por el s_ha_dum 25.01.2014 - 23:22
0

Me gusta la respuesta anterior de @s_ha_dum, pero para obtener la categoría de nivel superior independientemente de la profundidad, usé lo que considero una solución más simple:

$cats = get_the_category();
foreach ( $cats as $cat ) {
    if ( $cat->category_parent == 0 ) {
        return $cat->name; // ...or whatever other attribute/processing you want
    }
}
return ''; // This was from a shortcode; adjust the return value to taste
    
respondido por el scott8035 05.12.2018 - 19:04

Lea otras preguntas en las etiquetas