2

我正在开发一个 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 行代码!)...有人可以帮我解决这个问题吗?


第二次编辑:
好的,我仍在试图找出原因,但是今天,我的一段代码(上面)正在运行,并与我列出的所有类相呼应,但它们之间没有空格......所以为了让我的类正常工作,我m 在回声部分的末尾添加一个空格,如下所示{ echo "3d "; }。但我觉得这是一种让事情顺利进行的肮脏方式......

如何以正确的方式在每个类标签之间添加空格? 我的目标是这样的,foreach $categories as $cat { echo $cat . " "; }但 $categories 和 $cat 将引用每个“if”语句。

4

3 回答 3

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不是有效的类名,您可以使用类似movie3dor的名称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>
于 2012-10-17T15:52:51.803 回答
0

从您发布的代码开始,如果产品在所有四个指定的类别中,它应该添加所有类别。您可以在每个 之后添加引号之间的空格echo,例如:echo ' motion'

我会使用另一种方法,添加真正的所有类别,而无需按名称检查它们:

<li class="<?php echo implode( ' ', get_categories() ); ?>"> … </li>

请参阅:http ://codex.wordpress.org/Function_Reference/get_categories ,了解如何过滤函数的输出get_categories()

于 2012-10-17T15:51:05.717 回答
0

我建议您改为使用Wordpress API 中的此功能- 您应该阅读很多内容。

像这样的东西应该工作:

<?php $categories = get_categories(); ?>
<li class="<?php foreach ($categories as $cat) {
    echo $cat . " ";
 }?>"> -- Your li text --
</li>
于 2012-10-17T15:50:03.393 回答