【问题标题】:Category loop is showing all post titles (WordPress)类别循环显示所有帖子标题(WordPress)
【发布时间】:2020-10-20 07:57:28
【问题描述】:

我似乎无法让它正常工作。

此代码应该遍历自定义分类法中的所有类别,并在每个类别标题下显示帖子标题:

$args = array(
    'post_type' => 'news',
    'taxonomy'  => 'news_category',
    'orderby'   => 'name'
);
$categories = get_categories( $args );
foreach ( $categories as $category ) {
    $posts = get_posts($args);
    echo '<h2>' . $category->name . '</h2>'; ?>
    <ul>
        <?php foreach($posts as $post) { ?>
            <li>
                <?php the_title(); ?>
            </li>
        <?php 
    } ?>      
    </ul>
<?php
}

预期的结果是这样的……

第 1 类

  • 帖子标题
  • 另一个帖子标题

第 2 类

  • 又一个帖子标题

第 3 类

  • 你看,另一个帖子标题
  • 还有一个帖子标题,只是为了好玩

...但我得到的是:

第 1 类

  • 帖子标题
  • 另一个帖子标题
  • 又一个帖子标题
  • 你看,另一个帖子标题
  • 还有一个帖子标题,只是为了好玩

第 2 类

  • 帖子标题
  • 另一个帖子标题
  • 又一个帖子标题
  • 你看,另一个帖子标题
  • 还有一个帖子标题,只是为了好玩

第 3 类

  • 帖子标题
  • 另一个帖子标题
  • 又一个帖子标题
  • 你看,另一个帖子标题
  • 还有一个帖子标题,只是为了好玩

我该如何解决这个问题?

【问题讨论】:

  • 你得到了什么结果?
  • 每次调用$posts = get_posts($args); 都会返回每个帖子。您必须从当前类别 获取帖子。

标签: php wordpress foreach categories


【解决方案1】:

我认为这是因为当您使用 get_posts 时,您没有指定任何要搜索的分类术语,因为您再次使用 $args var,它只包含获取类别的一般参数。

要按照您想要的方式进行操作,您应该在调用 get_posts 时将 $args 替换为以下内容:

$postArgs = array(
    'post_type' => 'news',
    'tax_query' => array(
        array(
            'taxonomy' => 'news_category',
            'field'    => 'slug',
            'terms'    => $category->slug,
        ),
    ),
);
$posts = get_posts($postArgs);

在这里https://developer.wordpress.org/reference/classes/wp_query/#taxonomy-parameters 提供了您可以做什么的确切文档。

WP_Query 的工作方式与 get_posts 相同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多