Next/Previous Posts Links: Alphabetically and from Same Category

I’m exhaustively searching for a method to provide Next and Previous Post Links in a different way from which it usually appears in Single Post.

By DEFAULT it:

  • Is chronological ordered

  • Links to posts from all blog categories

But I NEED it:

  • ALPHABETICALLY ordered

  • Linking to posts on SAME CATEGORY only

I’m not a developer but I think if I could merge the two codes below the problem would be solved.

CODE 1 – Turn Next/Prev links alphabetcally, but not from same category (source)

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');

CODE 2 – Turn Next/Prev links from same category, but not alphabetically (source)

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

THANK YOU FOR HELP ME!


Source: https://wordpress.stackexchange.com/feeds

Related posts

Leave a Comment