You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现WordPress自定义文章类型同分类下的前后导航循环?

实现自定义文章类型分类内循环导航

解决方案思路

当get_adjacent_post无法获取到相邻文章时(即当前是分类内第一篇/最后一篇),直接查询该分类下的首尾文章来实现循环效果:

  • 若当前是分类内最后一篇,下一篇导航指向分类内第一篇
  • 若当前是分类内第一篇,上一篇导航指向分类内最后一篇

修改后的完整代码

<div class="nav-previous">  
    <?php
    // 获取当前文章所属的自定义分类项
    $current_terms = wp_get_post_terms(get_the_ID(), 'my-taxonomy-cat', array('fields' => 'ids'));
    if (!empty($current_terms)) {
        $next_post = get_adjacent_post(true, '', false, 'my-taxonomy-cat');
        
        // 如果没有下一篇,获取分类内最早的文章(循环到开头)
        if (!is_a($next_post, 'WP_Post')) {
            $args = array(
                'post_type' => get_post_type(), // 匹配当前自定义文章类型
                'posts_per_page' => 1,
                'orderby' => 'date',
                'order' => 'ASC', // 最早发布的文章作为循环起点
                'tax_query' => array(
                    array(
                        'taxonomy' => 'my-taxonomy-cat',
                        'field' => 'term_id',
                        'terms' => $current_terms[0]
                    )
                ),
                'post__not_in' => array(get_the_ID()) // 排除当前文章(避免分类只有一篇时重复)
            );
            $loop_query = new WP_Query($args);
            if ($loop_query->have_posts()) {
                $loop_query->the_post();
                $next_post = get_post();
                wp_reset_postdata();
            }
        }
        
        if (is_a($next_post, 'WP_Post')) {
            echo '<a href="' . get_permalink($next_post->ID) . '"><span class="prevArrow"><</span> ' . get_the_title($next_post->ID) . '</a>';
        }
    }
    ?>
</div>

<div class="nav-next">
    <?php
    $current_terms = wp_get_post_terms(get_the_ID(), 'my-taxonomy-cat', array('fields' => 'ids'));
    if (!empty($current_terms)) {
        $prev_post = get_adjacent_post(true, '', true, 'my-taxonomy-cat');
        
        // 如果没有上一篇,获取分类内最新的文章(循环到末尾)
        if (!is_a($prev_post, 'WP_Post')) {
            $args = array(
                'post_type' => get_post_type(),
                'posts_per_page' => 1,
                'orderby' => 'date',
                'order' => 'DESC', // 最新发布的文章作为循环终点
                'tax_query' => array(
                    array(
                        'taxonomy' => 'my-taxonomy-cat',
                        'field' => 'term_id',
                        'terms' => $current_terms[0]
                    )
                ),
                'post__not_in' => array(get_the_ID())
            );
            $loop_query = new WP_Query($args);
            if ($loop_query->have_posts()) {
                $loop_query->the_post();
                $prev_post = get_post();
                wp_reset_postdata();
            }
        }
        
        if (is_a($prev_post, 'WP_Post')) {
            echo '<a href="' . get_permalink($prev_post->ID) . '">' . get_the_title($prev_post->ID) . ' <span class="nextArrow">></span></a>';
        }
    }
    ?>
</div>

关键说明

  • wp_get_post_terms:获取当前文章所属的my-taxonomy-cat分类ID,确保导航始终限定在当前分类内
  • WP_Query:当无相邻文章时,查询分类内的首尾文章,order参数控制取最早/最新文章
  • post__not_in:避免分类下只有一篇文章时,导航指向自身
  • wp_reset_postdata():重置查询,避免影响后续页面内容

内容的提问来源于stack exchange,提问作者Wayne Goodman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:36:12