问题根源
这是因为您将两个类别应用于所有帖子。
每个帖子中的类别按字母顺序排列。
在您的情况下,您使用$category_slug = $categories[0]->slug;,这意味着:
从类别数组中获取第一个类别 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]) 中删除此结果。
现在您可以通过调用 $categories = array_values($categories) 将此数组的索引重置为从 0 开始。
从现在开始,您可以轻松地拨打$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"; }
当然,将 if 语句逻辑更改为您的数据。
更通用的解决方案以供将来参考
好的,这是我写的一些通用解决方案。
如果您只需要获取任何帖子的子类别,适用于帖子的任意数量的类别,并且无论父类别将在类别数组中的哪个位置,您都应该尝试这个。
首先,将此函数添加到您的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 );
如果你有帖子 ID,你也可以在循环外调用它
$subcategories = du_get_post_subcategories( $your_post_id );
此函数将返回与get_the_category() 函数格式相同的所有子类别。
如果您只为数组提供一个父类别。函数将返回一个空数组。