在Wordpress中仅显示每个类别的最新文章

时间:2018-09-08 05:01:00

标签: wordpress categories

我知道如何显示我网站的最新帖子,但是我想知道是否有办法列出最新帖子,每个类别仅显示一个帖子。可以说我们有4个类别,因此列表上仅显示4个帖子,并根据发布日期排序。 我该怎么办? 这是我目前的代码:

<?php $postid = get_the_ID(); ?>
                    <?php
                        $args = array(
                            'post_type' => 'topics',
                        );
                    ?>
                    <?php $query = new WP_Query( $args ); ?>
                    <?php if($query -> have_posts()): ?>
                <?php while($query -> have_posts()): $query->the_post();?>

                        <article class="article">
                            <a href="<?php the_permalink(); ?>">
                                <?php
                                if ($terms = get_the_terms($post->ID, 'topics_category')) :
                                foreach ( $terms as $term ) :
                                $term_slug = $term -> slug;
                                $term_link = get_term_link( $term );
                                ?>
                                <p class="article__category">
                                    <?php
                                        echo $term->name;
                                    ?>
                                </p>
                                <?php
                                endforeach;
                                endif;
                                ?>
                                <h2 class="article__title"><?php the_title(); ?></h2>
                                <p class="article__date"><?php the_time('Y年m月d日'); ?></p>
                            </a>
                        </article>

                <?php endwhile; ?>
                <?php endif; ?>
                <?php wp_reset_postdata();  ?>

2 个答案:

答案 0 :(得分:2)

您可以替换代码

    <?php $postid = get_the_ID(); ?>
    <?php
        $args = array(
            'post_type' => 'topics',
            'post_status' => 'publish'
        );
    ?>
    <?php $query = new WP_Query( $args ); ?>
    <?php if($query -> have_posts()): ?>
<?php while($query -> have_posts()): $query->the_post();?>
        <article class="article">
            <a href="<?php the_permalink(); ?>">
                <?php
                if ($product_terms = wp_get_object_terms($post->ID, 'topics_category')) :                    
                    foreach ( $product_terms as $term ) :
                    $term_slug = $term->slug;
                    $term_link = get_term_link( $term, 'topics_category' );
                    ?>
                    <p class="article__category">
                        <?php
                            echo $term->name;
                        ?>
                    </p>
                    <?php
                    endforeach;

                endif;
                ?>
                <h2 class="article__title"><?php the_title(); ?></h2>
                <p class="article__date"><?php the_time('Y年m月d日'); ?></p>
            </a>
        </article>
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata();  ?>

如果它不起作用,则将功能wp_get_object_terms替换为wp_get_post_terms

为了知识

https://codex.wordpress.org/Function_Reference/wp_get_post_terms

https://codex.wordpress.org/Function_Reference/wp_get_object_terms

答案 1 :(得分:1)

您应该采用另一种方法,即首先使用get_terms()获取类别,然后在foreach循环中使用WP_Query为每个类别获取一个帖子。在WP_Query参数中,您应该传递posts_per_page => 1参数以及tax_query参数。有关可用参数的信息,请参见:https://gist.github.com/luetkemj/2023628

希望有帮助