У меня есть категория «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/ Это на правом блоке
Это потому, что у вас есть две категории, примененные ко всем сообщениям.
Категории в каждом посте расположены в алфавитном порядке.
В вашем случае вы берете $category_slug = $categories[0]->slug;
, что значит:
Взять имя первого слагаемого категории из массива категорий
Для каждого поста это:
$categories[0] = Decouverte
, $categories[1] = Video
так как D
< V
$categories[0] = Actualite
, $categories[1] = Decouverte
так как A
< D
$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)
), затем удалите этот результат из массива $categories
— unset($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 () функция.
Если вы предоставляете массив только с одной родительской категорией. Функция вернет пустой массив.
Других решений пока нет …