programing

워드프레스: 알파벳순으로 previor_post_link / next_post_link?

stoneblock 2023. 10. 26. 20:35

워드프레스: 알파벳순으로 previor_post_link / next_post_link?

저는 맞춤형 게시글이 있는 워드프레스 웹사이트를 개발하고 있습니다.

<!-- 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(); ?>

화려한건 없고 그냥 평범한 고리일 뿐입니다.

게시물을 열 때 해당 페이지에는 게시물을 탐색할 수 있도록 일반적인 이전_post_link와 next_post_link가 있습니다.하지만 이것은 게시물의 시간 순서에 의해 이루어지며, 나는 물론 루프에서 사용했던 것과 같은 알파벳 순서로 그렇게 하고 싶습니다.이 문제에 대해 어떤 도움이라도 주시면 대단히 감사하겠습니다.미리 감사드립니다!

이 플러그인은 사용자가 원하는 작업을 수행하는 것 같습니다. 예:

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

의 필터를 사용하여 이 작업을 수행할 수 있습니다.get_adjacent_post기능.

당신의 기능대로.php 파일 추가:

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

그럼 싱글로.이전/다음 게시물 링크 기능을 호출하기 전에 php 페이지에 필터를 추가합니다.

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

특정 post_type을 확인하려면 필터 추가 섹션 주위에 if를 추가할 수 있습니다.

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

또는 post_type 특정 싱글 php 파일을 사용할 수 있습니다!

이 방법은 제게 아주 효과적이었지만, 만약 당신이 이것을 같은 용어의 게시물과 결합할 계획이라면 약간의 제한이 있을 수 있습니다.

언급URL : https://stackoverflow.com/questions/9925035/wordpress-previous-post-link-next-post-link-by-alphabetical-order