我正在使用Wordpress自定义模板,我正在按类过滤帖子。
当我将<?php post_class(); ?>
放入页面时,Wordpress会显示大量不必要的类,因此(这是它给我的class="post-54 post type-post status-publish format-standard hentry category-3d category-web"
)
我试图通过仅回显与帖子相关的类别来简化它。
编辑:
这是在我的页面<?php query_posts( 'showposts=99' ); ?>
然后这段代码
<li class="<?php if ( in_category('category-3d')) { echo "3d"; }
if ( in_category('category-animation')) { echo "animation"; }
if ( in_category('category-motion')) { echo "motion"; }
if ( in_category('category-shortfilm')) { echo "shortfilm"; }?>"></li>
如果我的帖子属于“动作”类别,请给我<li class="motion"></li>
。
问题是如果我的帖子属于多个类别,只有第一个被回复 ...我怎样才能告诉WP回复我的帖子受影响的所有类别的名称,同时在它们之间添加空格?
由于我是php语法的初学者,我仍然在学习如何以干净有效的方式工作(即不用编写16行代码!)......
有人可以帮我这个吗?
第二次编辑:
好吧我还在想弄清楚为什么,但今天,我的代码片段(上图)正在工作并回应我列出的所有类,但它们之间没有空间...所以为了使我的课程有效,我正在添加一个回声部分末尾的空格,如{ echo "3d "; }
。但我觉得这是让事情有效的肮脏方式......
如何以正确的方式在每个类标记之间添加空格?我的目标是这样的foreach $categories as $cat { echo $cat . " "; }
,但$ categories和$ cat会引用每个“if”语句。
答案 0 :(得分:1)
我不熟悉WP,但是如果你的类别包含get_categories()
这样的功能,那么你可以使用implode从所有类别中创建一个字符串。
<?php $categories = get_categories(); ?>
<?php $categories = implode(' ', $categories); ?>
<li class="<?php echo $categories; ?>">...</li>
你能提供返回get_categories()
的内容吗?
function get_class_attr() {
$classes = get_post_class();
$classes = substr($classes, 7, -1);
$arr = array();
$arr = explode(' ', $classes);
$classes = 'class="';
foreach($arr as $class_name) {
if(strpos($class_name, 'category-') !== false) {
$classes .= substr($class_name, 9).' ';
}
}
$classes = substr_replace($classes, '"', -1, 1);
echo $classes;
}
get_class_attr(); // output: class="3d web"
另请注意,3d
不是有效的类名,您可以使用movie3d
或film3d
之类的内容。
替代方法是稍早创建您的类值,然后echo
:
<?php
$classes = array();
if ( in_category('category-3d')) { $classes[] = "3d"; }
if ( in_category('category-animation')) { $classes[] = "animation"; }
if ( in_category('category-motion')) { $classes[] = "motion"; }
if ( in_category('category-shortfilm')) { $classes[] = "shortfilm";}
if(count($classes)) {
$classes = implode(' ', $classes);
} else {
$classes = '';
}
?>
<li class="<?php $classes ?>"></li>
答案 1 :(得分:0)
我建议您使用Wordpress API中的this function - 您应该阅读很多内容。
这样的事情应该有效:
<?php $categories = get_categories(); ?>
<li class="<?php foreach ($categories as $cat) {
echo $cat . " ";
}?>"> -- Your li text --
</li>
答案 2 :(得分:0)
截至您发布的代码,如果产品位于所有指定的四个类别中,则应添加所有类别。您可以在每个echo
之后添加引号之间的空格,例如:echo ' motion'
。
我会使用另一种方法,添加所有类别,而无需按名称检查它们:
<li class="<?php echo implode( ' ', get_categories() ); ?>"> … </li>
请参阅:http://codex.wordpress.org/Function_Reference/get_categories,了解如何过滤函数get_categories()
的输出。