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

问题描述 投票:0回答:1

已解决

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

默认情况下:

  • 按时间顺序排列

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

但我需要它:

  • 按字母顺序排列

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

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

代码 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 );
}

经过数周的寻找解决方案,这是最终答案

谢谢您帮助我!

php wordpress wordpress-theming
1个回答
-1
投票

您应该使用

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 } ?>
© www.soinside.com 2019 - 2024. All rights reserved.