注意-在你给我一些反馈后,我可能需要编辑此内容。
这里的诀窍是使用body_class
或post_class
过滤器。您的主题(应该)使用body_class
函数向HTML标记和互补post_class
函数可以对围绕您的主要帖子内容的任何标签执行相同的操作。它们的过滤器允许您用所需的任何内容扩展这些类列表。
因为您的CSS示例有如下选择器#content .category-academy-awards .entry-categories a
我猜我们在谈论post_class
谢谢你的提问。两者的工作方式完全相同。
在您的功能中。php文件,从以下内容开始:
add_filter(\'post_class\',\'wpse_235350_custom_body_class\');
function wpse_235350_custom_body_class( $classes ) {
return $classes;
}
现在,当WP生成一个页面并点击
post_class
函数,它将转移到此函数,传递类列表,然后该函数返回类列表,WP继续,将数组转换为一个由空格分隔的字符串,并将其推送到页面的HTML中。
还没有什么聪明的地方,但现在我们将扩展该函数,以便将其添加到类列表中。
我假设在循环中,你想找出每个帖子的类别,然后尝试找到每个帖子的顶级类别,并将该顶级类别添加到类列表中。例如,如果帖子属于类别predictions
然后我们将在树上查找顶级类别是academy-awards
因此,将其作为一个类添加到帖子中。
在我自己的编码中,我可能会比这里要浓缩更多的内容,并使用更少的临时变量,但这会导致不太清楚的答案。
首先,我们需要了解该职位的类别:
$categories = get_the_category();
这将返回类别对象的数组。我们将从此数组中提取类别ID:
if( count( $categories ) ) {
// as long as there is at least one category...
$catlist = array(); // good to make sure it really is empty to start with
foreach( $categories as $category ) {
$catlist[] = (int)$category->term_id;
// WP gets stroppy if you accidentally fail to use integers, so we co-erce the value here.
}
}
现在我们要用真正漂亮的
get_ancestors
查找每个类别的所有祖先。
get_ancestors
将拉出给定对象的所有祖先的列表,无论是
term
或a
post
或a
comment
.
$fullcatlist = array();
foreach( $catlist as $category ) {
$fullcatlist = array_merge( $fullcatlist, get_ancestors( $category, \'category\' ) );
}
// now $fullcatlist is a one dimensional array of all the ancestors\' IDs, possibly with duplicate values, so...
$fullcatlist = array_unique($fullcatlist);
现在让我们把所有的鼻涕虫都拿出来。我们获取所有的category对象,并将slug添加到一个数组中,将字符串“category-”放在每个类的前面。
$catsluglist = array();
foreach( $fullcatlist as $category ) {
$category = get_category( $category );
$catsluglist[] = \'category-\' . $category->slug;
}
现在我们有了它:当前帖子所有祖先类别的所有鼻涕虫的列表。
综上所述,我们有:
add_filter(\'post_class\',\'wpse_235350_custom_body_class\');
function wpse_235350_custom_body_class( $classes ) {
$categories = get_the_category();
if( count( $categories ) ) {
// as long as there is at least one category...
$catlist = array(); // good to make sure it really is empty to start with
foreach( $categories as $category ) {
$catlist[] = (int)$category->term_id;
// WP gets stroppy if you accidentally fail to use integers, so we co-erce the value here.
}
}
$fullcatlist = array();
foreach( $catlist as $category ) {
$fullcatlist = array_merge( $fullcatlist, get_ancestors( $category, \'category\' ) );
}
// now $fullcatlist is a one dimensional array of all the ancestors\' IDs, possibly with duplicate values, so...
$fullcatlist = array_unique($fullcatlist);
$catsluglist = array();
foreach( $fullcatlist as $category ) {
$category = get_category( $category );
$catsluglist[] = \'category-\' . $category->slug;
}
return $classes;
}
它未经测试,我很乐意帮助调试。我的那杯酒呢。。。
哦,最后一点。你的所有帖子现在都应该有这个类category-academy-awards
在它们上,如果这是顶级祖先,以及任何中间祖先类别。