Category_slug 类别儿童 wordpress
Category_slug of category children wordpress
我有一个类别 "Decouverte" 有三个子类别:"actualité"、"vidéo" 和 "coup de coeur"。
当我根据子类别对帖子进行排序时,除类别 "video" 之外的所有内容都有效; category_slug 显示 "decouverte".
在我的仪表板上,我看到了这个:
子类别 "Video" 最后显示,可能是它不起作用的原因?
我的代码:
$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/在正确的街区
问题来源
这是因为您已将两个类别应用于所有 post。
每个 post 中的类别按字母顺序排序。
在您的情况下,您选择 $category_slug = $categories[0]->slug;
,这意味着:
Take first category slug name from categories array
每个 post 是:
$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 语句逻辑。
更通用的解决方案以供将来参考
好的,这是我写的一些通用解决方案。
如果您只需要获取任何 post 的子类别,对于应用于 post 的任意数量的类别,无论父类别在类别数组中的哪个位置,您应该试试这个。
首先,将此函数添加到您的 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 );
如果你有post ID,你也可以在循环外调用它
$subcategories = du_get_post_subcategories( $your_post_id );
此函数将 return 所有子类别的格式与 get_the_category() 函数相同。
如果您提供的数组只有一个父类别。函数将 return 一个空数组。
我有一个类别 "Decouverte" 有三个子类别:"actualité"、"vidéo" 和 "coup de coeur"。
当我根据子类别对帖子进行排序时,除类别 "video" 之外的所有内容都有效; category_slug 显示 "decouverte".
在我的仪表板上,我看到了这个:
子类别 "Video" 最后显示,可能是它不起作用的原因?
我的代码:
$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/在正确的街区
问题来源
这是因为您已将两个类别应用于所有 post。
每个 post 中的类别按字母顺序排序。
在您的情况下,您选择 $category_slug = $categories[0]->slug;
,这意味着:
Take first category slug name from categories array
每个 post 是:
$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 语句逻辑。
更通用的解决方案以供将来参考
好的,这是我写的一些通用解决方案。
如果您只需要获取任何 post 的子类别,对于应用于 post 的任意数量的类别,无论父类别在类别数组中的哪个位置,您应该试试这个。
首先,将此函数添加到您的 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 );
如果你有post ID,你也可以在循环外调用它
$subcategories = du_get_post_subcategories( $your_post_id );
此函数将 return 所有子类别的格式与 get_the_category() 函数相同。
如果您提供的数组只有一个父类别。函数将 return 一个空数组。