如何实现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
相关产品推荐
相关产品推荐

