Category_slug категории детей WordPress

У меня есть категория «Decouverte», у которой есть три подкатегории: «actualité», «vidéo» и «coup de coeur».

Когда я сортирую сообщения по их подкатегориям, все работает, кроме категории «видео»; «category_slug» отображает «decouverte».

На моей приборной панели я вижу это: мои сообщения

Подкатегория «Видео» отображается последней, может, поэтому она не работает?

Мой код:

        $categories = get_the_category();
$category_slug = $categories[0]->slug;

echo $category_slug;

if ( $category_slug  == 'actualite' ) { ?>
<div class="picto_home icone_actualite"></div><?php
}

elseif ( $category_slug  == 'video' ) { ?>
<div class="picto_home icone_video"></div><?php
}

elseif ( $category_slug  == 'coupdecoeur' ) { ?>
<div class="picto_home icone_coupdecoeur"></div><?php
}

else { echo "Doesn't work"; } ?>

И сайт: http://www.overso.me/ Это на правом блоке

1

Решение

Это потому, что у вас есть две категории, примененные ко всем сообщениям.

Категории в каждом посте расположены в алфавитном порядке.

В вашем случае вы берете $category_slug = $categories[0]->slug;, что значит:

Взять имя первого слагаемого категории из массива категорий

Для каждого поста это:

  1. $categories[0] = Decouverte, $categories[1] = Video так как D < V
  2. $categories[0] = Actualite, $categories[1] = Decouverte так как A < D
  3. $categories[0] = Coup de coeur, $categories[1] = Decouverte так как C < D

Итак, вот мой подход к вашей проблеме.

Перед проверкой на $categories[0]->slug, давайте проверим $categories[0] возражать против категории РОДИТЕЛЯ Вы можете сделать это, проверив:

$categories = get_the_category();

// Remove parent category object from array if it's on first place
if($categories[0]->parent == 0){
unset($categories[0]);
$categories = array_values($categories);
}

Как вы видите, если $categories[0] является родительской категорией (if($categories[0]->parent == 0)), затем удалите этот результат из массива $categoriesunset($categories[0]),

Теперь вы можете просто сбросить индексирование этого массива, начиная с 0по телефону $categories = array_values($categories),

Отныне вы можете легко позвонить $categories[0]->slugпотому что на первом месте точно нет родительской категории.

$categories = get_the_category();

// Remove parent category object from array if it's on first place
if($categories[0]->parent == 0){
unset($categories[0]);
$categories = array_values($categories);
}

$category_slug = $categories[0]->slug;

if ( $category_slug  == 'child-1' ) {
echo "1111";
}

elseif ( $category_slug  == 'child-2' ) {
echo "2222";
}

elseif ( $category_slug  == 'child-3' ) {
echo "3333";
}

else { echo "Doesn't work"; }

Конечно, измените, если заявления логики для ваших данных.

Хорошо, вот общее решение, которое я написал.

Если вам нужно получить только подкатегории для любого сообщения, для любого количества категорий, примененных к сообщению, и независимо от того, какое место родительская категория будет в массиве категорий, попробуйте это.

Сначала добавьте эту функцию в ваш файл functions.php (или в ваш файл плагина).

function du_get_post_subcategories( $post_id ){
$categories = get_the_category( $post_id );

$i = 0;
foreach ($categories as $category) {
if($category->parent == 0){
unset($categories[$i]);
}
$i++;
}

$categories = array_values($categories);
return $categories;
}

И тогда внутри вашего цикла вы можете позвонить

$subcategories = du_get_post_subcategories( $post->ID );

Если у вас есть идентификатор сообщения, вы можете вызвать это и вне цикла

$subcategories = du_get_post_subcategories( $your_post_id );

Эта функция вернет все подкатегории в том же формате, что и get_the_category () функция.

Если вы предоставляете массив только с одной родительской категорией. Функция вернет пустой массив.

2

Другие решения

Других решений пока нет …