可能是个很简单的问题。。。我试图在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>
我的代码语法正确吗?还是我到处都是这样:(
最合适的回答,由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_Query
或get_posts
呼叫wp_reset_postdata();
如果您正在使用query_posts
使用wp_reset_query();
记住在每次post循环之后重置内容,在开始循环之前始终检查是否有任何post,并且始终在检查之后重置,而不是在循环之后重置(否则,如果没有找到post,则不会重置)。