“/ page / 2 /”가 작동하지 않는 이유는 무엇입니까?


11

마지막으로 아래 코드로 페이지 매김을 수행했지만 현재 페이지 매김이 존재하지 않는 / videos / page / 2 /에 연결됩니다. 2 페이지를 작동 시키려면 어떻게해야합니까?

<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('post_type=videos&showposts=1'.'&paged='.$paged);

while ($wp_query->have_posts()) : $wp_query->the_post();
  //display stuff
endwhile;           

php  wp_pagenavi();
 ?>

그런 주요 쿼리를 재정의하는 것은 좋지 않습니다 pre_get_posts. 그럼 당신은 오히려 자신을 쓰기보다가 매김 코드에 내장 사용할 수 있으며 표준 포스트 루프 아래로 단순화 할 수 있습니다
톰 J 노웰

이미에서 게시물 보관해야하므로 또한, 워드 프레스, 게시 유형의 표준 아카이브 페이지를 제공 /videos/하는로드 것 archive-videos.php, 그 어떤 쿼리와 함께 장난 필요하지 않습니다
톰 J 노웰

답변:


15

답을 찾았습니다.

워드 프레스 코어를 통해 하루 종일 디버깅 한 후이 문제를 해결했습니다.

기본적으로 CANT는 동일한 이름을 가진 PAGE와 CUSTOM POST TYPE을 갖습니다. 그렇게하면 퍼머 링크 다시 쓰기 규칙이 혼동되어 404가 트리거됩니다.

내가 사용하는 매우 간단한 해결책은 다음과 같습니다. 사용자 정의 게시물 유형을 나열하는 페이지는 복수 (예 : 제품)로 호출되고 실제 게시물 유형 이름은 단수 (예 : 제품)입니다. 그래서 그들은 충돌하지 않으며 모두 괜찮습니다.

끝났다! 이것이 사람들의 시간을 절약 할 수 있기를 바랍니다.


6
맞춤 게시물뿐만 아니라 같은 이름의 게시물과 페이지도 가질 수 없습니다.
Rutwick Gangurde

4

오랜 시간이 지나서 나는이 문제에 대한 해결책을 찾았습니다 ( franzblog 덕분에 ).

버전 4.2 이상을 사용중인 경우 functions.php파일에 다음 행을 추가해야 합니다.

add_filter( 'redirect_canonical', 'custom_disable_redirect_canonical' );
function custom_disable_redirect_canonical( $redirect_url ) {
    if ( is_paged() && is_singular() ) $redirect_url = false; 
    return $redirect_url; 
}

이제 모든 것이 잘 작동합니다!


1

당신은 같은 이름을 가진 PAGE와 CUSTOM POST TYPE을 가질 수 있습니다.

몇 년 전에는 불가능했을 수도 있지만 이제는 가능합니다.

먼저이 줄을 $args게시물 유형에 추가하십시오 .

'has_archive' => false,
'rewrite'     => array(
                 'slug'       => 'your slug', // if you need slug
                 'with_front' => false,
                 ),

둘째, functions.php추가 작업에서 :

add_action('init', 'custom_rewrite_basic');
function custom_rewrite_basic() {
    global $wp_post_types;
    foreach ($wp_post_types as $wp_post_type) {
        if ($wp_post_type->_builtin) continue;
        if (!$wp_post_type->has_archive && isset($wp_post_type->rewrite) && isset($wp_post_type->rewrite['with_front']) && !$wp_post_type->rewrite['with_front']) {
            $slug = (isset($wp_post_type->rewrite['slug']) ? $wp_post_type->rewrite['slug'] : $wp_post_type->name);
            $page = get_page_by_slug($slug);
            if ($page) add_rewrite_rule('^' .$slug .'/page/([0-9]+)/?', 'index.php?page_id=' .$page->ID .'&paged=$matches[1]', 'top');
        }
    }
}

function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) {
    global $wpdb;

    $page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s AND post_status = 'publish'", $page_slug, $post_type ) );

    return ($page ? get_post($page, $output) : NULL);
}

대시 보드에서 규칙을 플러시하는 것을 잊지 마십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.