用于回显多个类的Php语法,它们之间有空格

时间:2012-10-17 15:44:50

标签: php wordpress syntax

我正在使用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”语句。

3 个答案:

答案 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不是有效的类名,您可以使用movie3dfilm3d之类的内容。

替代方法是稍早创建您的类值,然后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()的输出。