类别页面只显示一个帖子,而该帖子有多个类别?

时间:2015-11-29 作者:ninja08

我看到的错误是,按照我当前设置类别页面的方式,如果该页面上的帖子有多个类别,循环将不会加载后面有多个类别的帖子。

目前我在WordPress的测试安装中有大约10篇帖子。其中9个类别相同,我们称之为“惊讶”。其中1个有3类。当我转到分类页面“惊讶”时,页面上没有看到10篇帖子,包括一篇有3个不同类别的帖子,而是停止加载后面的分类帖子。

下面是category页面上ate的一个循环的示例(共有4个循环,目前它们的行为都相同)。

<? get_header(); ?>

<?
$cat_array = get_the_category();
$cat_name = esc_html($cat_array[0]->name);
?>
    <?
    $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
    $args  = array(
      \'category_name\'  => $cat_name,
      \'paged\'          => $paged,
      \'posts_per_page\' => 2
    );
    $wp_query = new WP_Query($args);
    while($wp_query->have_posts()) : $wp_query->the_post(); ?>
    <div class="post-box pane">
      <a href="<? the_permalink(); ?>" class="article">
        <h3 class="title"><? echo get_the_title(); ?></h3>
        <? echo the_post_thumbnail(\'smaller-general-thumb\', array(\'class\' => \'thumb\')) ?>
      </a>
    </div>
    <? endwhile; wp_reset_postdata(); ?>
我之所以用不同的循环来做4个部分,是因为每个部分都有特定数量的帖子。我必须限制一个部分显示的帖子数量,因此我创建了一个新的循环,并通过分页和限制每页帖子来限制该循环的帖子。

2 个回复
最合适的回答,由SO网友:Hans Spieß 整理而成

循环外部有多个循环,您可以使用get_terms( \'taxonomy_name\' ). 生成的数组包含如下对象

object(stdClass)#141 (9) {
    ["term_id"] => string(1) "3"
    ["name"] => string(9) "The Name of your Category"
    ["slug"] => string(9) "name-of-tax-term"
    ["term_group"] => string(1) "0"
    ["term_taxonomy_id"] => string(1) "3"
    ["taxonomy"] => string(11) "slug_of_tax"
    ["description"] => string(41) "Description of Term."
    ["parent"] => string(1) "0"
    ["count"] => string(1) "3"
}
因此,您希望获得类别slug,而不是其名称:

$cats = get_terms( \'category\' );
然后可以循环类别,如

foreach ( $cats as $cat ) {
    $args  = array(
      \'category_name\'  => $cat->slug,
      \'paged\'          => $paged,
      \'posts_per_page\' => 2
    );
    // the loop
    wp_reset_postdata();
}
如果循环在未更改的主查询上运行,则当前类别已存在于查询中。

只要换一下

$args  = array(
  \'category_name\'  => $cat_name,
  \'paged\'          => $paged,
  \'posts_per_page\' => 2
);

$args  = array(
  \'paged\'          => $paged,
  \'posts_per_page\' => 2
);
在代码中。

此外,不使用时get_the_category() 在循环中,必须传递一个post ID作为参数。

SO网友:ninja08

这是我发现的最优雅、最适合我的解决方案:

<? global $wp_query; ?>

$args  = array_merge( $wp_query->query_vars, array( \'posts_per_page\' => 2));
$the_query = new WP_Query($args);
while($the_query->have_posts()) : $the_query->the_post(); ?>

/// The loop

<? endwhile; rewind_posts(); ?> 
我特别决定使用array\\u merge将全局查询与我正在编写的循环合并,以限制该循环的帖子数量。现在我不需要指定类别,因为它已经在全局查询中了。无需亲自更新dat bish。

谢谢大家的帮助!

相关推荐

如何将自定义选项添加到wp_Dropdown_Categories?

我需要将自定义选项添加到wp_dropdown_categories. 现在,整个万维网世界还没有找到解决方案。。。因此,我在这里要求一个解决方案……因为我真的无法想象WordPress的开发人员没有考虑到这将永远不需要,对吗?