2012-03-29 43 views
5

Tôi đang phát triển một trang web wordpress với các bài đăng tùy chỉnh được sắp xếp theo thứ tự bảng chữ cái trong vòng lặp.Wordpress: previous_post_link/next_post_link theo thứ tự bảng chữ cái?

<!-- THE ARGS --> 
<?php global $query_string; 
$args = wp_parse_args($query_string); 
$args = array(
    'post_type' => 'custom_post', 
    'orderby' => 'title', 
    'order' => 'ASC', 
    'posts_per_page' => -1, 
    ); ?> 

<!-- THE LOOP --> 
<?php $wp_query = new WP_Query($args); ?> 
<?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?> 
<?php endwhile; ?> 
<?php wp_reset_query(); ?> 

Không có gì lạ mắt ở đó, chỉ là vòng lặp bình thường.

Khi tôi mở một bài đăng, trong trang của tôi, tôi có previous_post_link và next_post_link thông thường để tôi có thể điều hướng qua các bài đăng. Tuy nhiên, điều này được thực hiện theo thứ tự thời gian của các bài viết, và tôi muốn làm như vậy theo thứ tự chữ cái giống như tôi đã sử dụng trong vòng lặp, tất nhiên. Bất kỳ sự giúp đỡ nào về vấn đề này sẽ rất được đánh giá cao. Cảm ơn bạn trước!

Trả lời

6

Dường như this plug-in làm những gì bạn đang sau, ví dụ .:

<ul class="pager"> 
     <?php previous_post_link_plus(array('order_by' => 'post_title')); ?> 
     <?php next_post_link_plus(array('order_by' => 'post_title')); ?> 
</ul> 
+0

Thật tuyệt vời. Cảm ơn rất nhiều, bạn đời. – Cthulhu

+0

Plugin này chưa được cập nhật trong vài năm, nhưng nó vẫn hoạt động tốt !!! Ai đó chỉ nên kiểm tra lại nó để nó có thể quay lại các tùy chọn có thể cài đặt trong quản trị viên wp. Tôi đã phải tải lên lại từ trang wp. –

0

Đó plugin đã không được cập nhật trong năm, không chắc chắn nếu nó vẫn hoạt động. Trong trường hợp không, I came up with a solution có thể được thêm vào functions.php của bạn. Hy vọng nó giúp!

3

Bạn có thể thực hiện việc này bằng cách sử dụng các bộ lọc trong hàm get_adjacent_post.

Trong file functions.php của bạn, thêm:

function mytheme_previous_post_orderby_name($orderby){ 
    return "ORDER BY p.post_title DESC LIMIT 1"; 
} 
function mytheme_previous_post_where_name(){ 
    global $post, $wpdb; 
    return $wpdb->prepare("WHERE p.post_title < %s AND p.post_type = %s AND (p.post_status = 'publish' OR p.post_status = 'private')", $post->post_title, $post->post_type); 
} 
function mytheme_next_post_orderby_name($orderby){ 
    return "ORDER BY p.post_title ASC LIMIT 1"; 
} 
function mytheme_next_post_where_name(){ 
    global $post, $wpdb; 
    return $wpdb->prepare("WHERE p.post_title > %s AND p.post_type = %s AND (p.post_status = 'publish' OR p.post_status = 'private')", $post->post_title, $post->post_type); 
} 

Sau đó, trong trang single.php của bạn thêm các bộ lọc trước khi bạn gọi các bài viết trước/sau liên kết chức năng:

add_filter('get_previous_post_sort', 'mytheme_previous_post_orderby_name', 10, 1); 
add_filter('get_next_post_sort', 'mytheme_next_post_orderby_name', 10, 1); 

add_filter('get_previous_post_where', 'mytheme_previous_post_where_name', 10); 
add_filter('get_next_post_where', 'mytheme_next_post_where_name', 10); 

the_post_navigation(); 

remove_filter('get_previous_post_sort', 'mytheme_previous_post_orderby_name', 10); 
remove_filter('get_next_post_sort', 'mytheme_next_post_orderby_name', 10); 
remove_filter('get_previous_post_where', 'mytheme_previous_post_where_name', 10); 
remove_filter('get_next_post_where', 'mytheme_next_post_where_name', 10); 

Nếu bạn muốn kiểm tra post_type cụ thể của mình, bạn có thể thêm nếu xung quanh phần thêm bộ lọc:

if($post->post_type == 'my_custom_post_type'){ 
    add_filter(...); 
    the_post_navigation(); 
    remove_filter(...); 
} 

hoặc, bạn chỉ có thể sử dụng tệp single.php post_type cụ thể!

Điều này rất hữu ích đối với tôi, nhưng có thể có một số hạn chế nếu bạn định kết hợp điều này với các bài đăng trong cùng một cụm từ ...

+1

Câu trả lời của Danbrellis có dấu nháy đơn thiếu. Tôi không thể nhận xét vì đây là tài khoản đầu tiên của tôi và không có đủ đại diện để nhận xét. remove_filter ('get_previous_post_sort', mytheme_previous_post_orderby_name ', 10); Nên được 'remove_filter ('get_previous_post_sort', 'mytheme_previous_post_orderby_name', 10);' (tuy nhiên, ngay cả với sửa chữa đó, tôi không thể làm việc này) – plumbinator

+0

plumbinator- cảm ơn vì đã bắt được điều đó. bạn có thân thiết không? Tôi rất vui khi xem xét nếu bạn có một số mã mẫu. – danbrellis

Các vấn đề liên quan