Tại sao là / trang / 2 / không hoạt động?


11

Cuối cùng, phân trang để làm việc với mã dưới đây, nhưng bây giờ liên kết phân trang đến / videos / page / 2 /, không tồn tại. Làm thế nào để tôi có được trang 2 để làm việc?

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

Tôi không khuyên bạn nên ghi đè truy vấn chính như vậy, bạn đã xem xét sử dụng pre_get_postschưa? Sau đó, bạn có thể sử dụng mã phân trang được xây dựng thay vì tự viết và bạn có thể đơn giản hóa thành một vòng lặp tiêu chuẩn
Tom J Nowell

Ngoài ra, WordPress cung cấp một trang lưu trữ tiêu chuẩn cho các loại bài đăng, vì vậy bạn nên có một kho lưu trữ bài đăng /videos/sẽ tải archive-videos.php, không yêu cầu phải loay hoay với các truy vấn
Tom J Nowell

Câu trả lời:


15

Tìm thấy câu trả lời:

Sau một ngày looong gỡ lỗi thông qua lõi wordpress, tôi quản lý để giải quyết vấn đề này.

Về cơ bản, bạn CANT có TRANG và LOẠI BÀI TẬP TÙY CHỈNH có cùng tên. Nếu bạn làm như vậy, các quy tắc viết lại permalink sẽ bị lẫn lộn và kích hoạt 404.

Một giải pháp rất đơn giản mà tôi đang sử dụng là: Trang liệt kê các loại bài đăng tùy chỉnh được gọi ở số nhiều (ví dụ: sản phẩm) và tên loại bài đăng thực tế ở dạng số ít (ví dụ: sản phẩm). Vì vậy, họ không xung đột và tất cả đều ổn.

Hoàn thành hoàn thành! Hy vọng điều này sẽ tiết kiệm thời gian của mọi người.


6
Tôi đoán, không chỉ bài đăng tùy chỉnh, bạn không thể có một bài đăng và một trang có cùng tên.
Rutwick Gangurde

4

Sau một thời gian dài tôi đã tìm ra giải pháp cho vấn đề này (nhờ franzblog ).

Nếu bạn đang sử dụng phiên bản 4.2 trở lên, bạn cần thêm các dòng sau vào functions.phptệp của mình :

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

Bây giờ mọi thứ đang làm việc rất ổn định!


1

bạn CANT có TRANG và LOẠI POST TÙY CHỈNH có cùng tên

Có thể cây nhiều năm trước là không thể, nhưng bây giờ bạn CÓ THỂ.

Đầu tiên, thêm dòng này $argsvào loại bài đăng của bạn:

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

Thứ hai, trong functions.phphành động thêm:

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

Đừng quên tuôn ra các quy tắc trong bảng điều khiển.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.