Як отримати батьківський ковпак для поточної публікації


12

Моя тема має стилізацію за категорією, використовуючи наступний код, який вставляє кулю поточної категорії як клас CSS.

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

Тепер я збираюся додати велику кількість нових підкатегорій, і здається нерозумним додати їх усіх у CSS, коли я маю змогу просто вибрати батьківську категорію поточної публікації та застосувати стилі до цього.

Мені вдалося отримати ім’я батьківської категорії:

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

Але пробіли (і використання великих літер) - це проблема ... І я, здається, не можу отримати слима батьківської категорії.

Я знаю, що я, певно, десь пропускаю простий крок, але будь-яке розуміння буде дуже вдячне.

Відповіді:


18

Вам потрібно буде використовувати значення ідентифікатора, що повертається, $category[0]->category_parentі передати його get_term(). Приклад:

$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;
}

5

Вам потрібно буде запитувати дані батьківської категорії. get_categoryв значній мірі побудований для цього.

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

Це поверне безпосередній батько категорії. Це даний набір категорій:

  • Мультфільм
    • Собака
      • Скубі

Код вище поверне "Собаку", якщо ви дасте йому ідентифікатор для "Скубі". Якщо ви хочете найвищої категорії батьків - "Мультфільм" - незалежно від того, наскільки глибоко вкладаються, використовуйте щось подібне:

$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();
}

Це також має перевагу порівняно акуратного поводження з помилками.


Дякую за відповідь, і я, швидше за все, буду використовувати подібний фрагмент у майбутньому, але він також видає помилки, якщо публікація в батьківській категорії / категорії без підкатегорій.
DLR

@DLR: Так, я знаю. Мені довелося піти, перш ніж я змогла завершити відповідь. Я працював над чимось складнішим і надійнішим. Дивіться редагування.
s_ha_dum

0

Мені подобається попередня відповідь від @s_ha_dum, але для отримання категорії вищого рівня незалежно від глибини я використав те, що вважаю більш простим рішенням:

$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

0

Якщо це може допомогти комусь ... отримати дитину кішку чи батьків, залежно від того, 0чи 1ви наділи$category

$category = get_the_category();
$parent = get_cat_name( $category[0]->category_parent );
if( ! function_exists('get_cat_slug') )
{
    function get_cat_slug($cat_id) {
        $cat_id = (int) $cat_id;
        $category = &get_category($cat_id);
        return $category->slug;
    }
}
if ( !empty($parent) ) {
    $output .= '<H2>' . esc_html( $category[1]->name ) . '</H2>';                               
} else {
    $output .= '<H2>' . esc_html( $category[0]->name ) . '</H2';
}

0

Ви можете спростити його так:

  $category   = get_the_category();
  $cat_parent = $category[0]->category_parent;
  $category   = $cat_parent != 0 ? get_term($cat_parent, 'category')->slug : $category[0]->slug;

0

Наступна функція пристосована для повернення кореневої категорії:

function get_root_category($category = null) {
  if (!$category) $category = get_the_category()[0];
  $ancestors = get_ancestors($category->term_id, 'category');
  if (empty($ancestors)) return $category;
  $root = get_category(array_pop($ancestors)); 
  return $root;
}

Використання: get_root_category()->slug

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.