下一篇/上一篇文章链接来自同一类别并按字母顺序排列



已解决

我正在全力寻找一种方法来提供下一篇和上一篇文章链接,与它通常出现在单篇文章中的方式不同。

默认情况下:

  • 按时间顺序排列的

  • 链接到所有博客类别的帖子

但我需要它:

  • 阿尔法订购

  • 链接到仅来自同一类别的的帖子

我不是一个开发人员,但我发现了两个代码,我想如果我能将两者合并,问题就会得到解决。有人能帮帮我吗?

代码1-按字母顺序切换下一个/上一个链接,但不来自同一类别(来源(

function filter_next_post_sort($sort) {
    $sort = "ORDER BY p.post_title ASC LIMIT 1";
    return $sort;
}
function filter_next_post_where($where) {
    global $post, $wpdb;
    return $wpdb->prepare("WHERE p.post_title > '%s' AND p.post_type = '". get_post_type($post)."' AND p.post_status = 'publish'",$post->post_title);
}
function filter_previous_post_sort($sort) {
    $sort = "ORDER BY p.post_title DESC LIMIT 1";
    return $sort;
}
function filter_previous_post_where($where) {
    global $post, $wpdb;
    return $wpdb->prepare("WHERE p.post_title < '%s' AND p.post_type = '". get_post_type($post)."' AND p.post_status = 'publish'",$post->post_title);
}
add_filter('get_next_post_sort',   'filter_next_post_sort');
add_filter('get_next_post_where',  'filter_next_post_where');
add_filter('get_previous_post_sort',  'filter_previous_post_sort');
add_filter('get_previous_post_where', 'filter_previous_post_where');

代码2-从同一类别转到下一个/上一个链接,但不是按字母顺序(来源(

add_filter( 'get_next_post_join', 'navigate_in_same_taxonomy_join', 20);
add_filter( 'get_previous_post_join', 'navigate_in_same_taxonomy_join', 20 );
function navigate_in_same_taxonomy_join() {
 global $wpdb;
 return " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id";
}

add_filter( 'get_next_post_where' , 'navigate_in_same_taxonomy_where' );
add_filter( 'get_previous_post_where' , 'navigate_in_same_taxonomy_where' );
function navigate_in_same_taxonomy_where( $original ) {
 global $wpdb, $post;
 $where = '';
 $taxonomy   = 'category';
 $op = ('get_previous_post_where' == current_filter()) ? '<' : '>';
 $where = $wpdb->prepare( "AND tt.taxonomy = %s", $taxonomy );
 if ( ! is_object_in_taxonomy( $post->post_type, $taxonomy ) )
 return $original ;
 $term_array = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );
 $term_array = array_map( 'intval', $term_array );
 if ( ! $term_array || is_wp_error( $term_array ) )
 return $original ;
 $where = " AND tt.term_id IN (" . implode( ',', $term_array ) . ")";
 return $wpdb->prepare( "WHERE p.post_date $op %s AND p.post_type = %s AND p.post_status = 'publish' $where", $post->post_date, $post->post_type );
}

经过数周的解决方案搜索,以下是最终答案

谢谢你帮我

您应该使用get_adjacent_post();,这将为您提供下一篇或上一篇文章。

这是上一篇文章:

<?php 
    $prev_post = get_adjacent_post( true, '', true, 'taxonomy_slug' ); ?>
    if ( is_a( $prev_post, 'WP_Post' ) ) {
?>
<a href="<?php echo get_permalink( $prev_post->ID ); ?>"><?php echo get_the_title( $prev_post->ID ); ?></a>
<?php } ?>

这是下一篇文章:

<?php 
    $next_post = get_adjacent_post( true, '', false, 'taxonomy_slug' );
    if ( is_a( $next_post, 'WP_Post' ) ) {
?>
<a href="<?php echo get_permalink( $next_post->ID ); ?>"><?php echo get_the_title( $next_post->ID ); ?></a>
<?php } ?>

最新更新