在PHP中定义特定类别名称

时间:2012-04-10 作者:Romes

可能是个很简单的问题。。。我试图在PHP中提取一个类别名称,并将其显示在我的页面上。我在这个页面上有多个分类部分,每个部分都需要把他们受人尊敬的名字作为一个h2。以下是我目前正在做的事情:

<div class="category-section">
    <h2><?php the_category(); ?></h2>
    <div class="content">
        <?php query_posts(\'category_name"theCategoryName"\');
        while (have_posts()) : the_post(); ?>
            #code...
        <?php endwhile; ?>
    </div>
</div>
当我query_posts 对于我的theCategoryName 我得到了该部分所需的内容,然而,在我的上面几行the_category() 打印出来后,我的所有不同部分的名称都保持不变。例如,如果类别名称为“cats”,那么对于我所有具有h2的部分,显示文本“cats”。

让我们假设这一特定部分是“狗”而不是“猫”,我将如何实现这一点?希望这有意义。。

*EDIT*

这是我的代码的更新版本,但我仍然有问题。the_category(); 对于每个部分,仍然显示为相同的名称。如果我用不同的类别创建一篇新文章,它就好像类别名称会改变一样。例如,如果我创建了“cars”,那么下面两个类别名称都将更改为“cars”。

<div class="category-1">
    <h2><?php the_category(); ?></h2>
    <div class="content">
        <?php 
        $q = new WP_Query(\'category_name="cats"\');
        if($q->have_posts()) {
            while ($q->have_posts()) : $q->the_post(); ?>
                #code...
            <?php 
            endwhile; 
        }
        wp_reset_postdata();
        ?>
    </div>
</div>
<div class="category-2">
    <h2><?php the_category(); ?></h2>
    <div class="content">
        <?php 
        $q = new WP_Query(\'category_name="dogs"\');
        if($q->have_posts()) {
            while ($q->have_posts()) : $q->the_post(); ?>
                #code...
            <?php 
            endwhile; 
        }
        wp_reset_postdata();
        ?>
    </div>
</div>
我的代码语法正确吗?还是我到处都是这样:(

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

出于可读性的考虑,我建议不要使用query\\u帖子,因为它更容易出错,并且在嵌套它们时可能会导致混乱。(您在语法中还漏掉了一个等号。

改为使用WP\\U查询,并检查何时未找到帖子,例如,此代码:

<div class="category-section">
    <h2><?php the_category(); ?></h2>
    <div class="content">
        <?php
        $q = new WP_Query(\'category_name=theCategoryName\');
        if($q->have_posts()){
            while ($q->have_posts()) : $q->the_post(); ?>
                #code...
            endwhile;
        } else {
            ?><p>No posts</p><?php
        }
 ?>
    </div>
</div>
最后,问题的根本原因是,必须在完成循环后添加对该函数的调用,以将所有内容重置回循环之前的状态。

如果您正在使用WP_Queryget_posts 呼叫wp_reset_postdata();

如果您正在使用query_posts 使用wp_reset_query();

记住在每次post循环之后重置内容,在开始循环之前始终检查是否有任何post,并且始终在检查之后重置,而不是在循环之后重置(否则,如果没有找到post,则不会重置)。

结束

相关推荐

如何通过unctions.php为编辑器隐藏插件选项

我已经读过了Best Collection of Code for your functions.php file, 这真的帮了我很大的忙。我只有一个问题,is there a way to hide some plugins options (in their respective administrations), just like the way you hide the widgets at the dashboard?. 这是因为我必须让编辑器管理插件的某些部分,但不是全部(例如,在滑块中,他