источник проблемы
Это потому, что у вас есть две категории применяются ко всем сообщениям.
Категории в каждом посте хранятся в алфавитном порядке.
В вашем случае вы принимаете $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
Как заставить его работать, как вы хотите
Ok так вот мой подход к вашей проблеме.
Перед проверкой на $categories[0]->slug
, отметьте $categories[0]
объект a РОДИТЕЛЬ. Вы можете сделать это путем проверки:
$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() функция.
Если вы предоставили массив только с одной родительской категорией. Функция вернет пустой массив.
Я понимаю, но как я могу настроить таргетинг подкатегории автоматически? –
Отредактированный ответ, надеюсь, что это поможет –
Большое спасибо за вашу помощь; вы, вероятно, правы, но я не знаю, как использовать '$ child_categories' для фильтрации:/ Все еще работаю над этим –