Wordpress Pagination không hoạt động - Luôn hiển thị nội dung trang đầu tiên


9

Tôi đang làm việc trên một trang web nơi tôi có một blog nhưng tôi cũng có một loại bài đăng tùy chỉnh để cho phép tôi thả vào một số video.

Tôi muốn sử dụng phân trang để nếu có nhiều hơn 9 video được hiển thị thì xảy ra phân trang.

Phần đầu tiên của công trình này. Các video thực sự bị giới hạn ở mức 9 trên mỗi trang và phân trang hiển thị chính xác ở phía dưới.

Tuy nhiên, khi tôi nhấp vào liên kết cho trang thứ hai, mặc dù URL thay đổi, các video của trang đầu tiên được hiển thị.

Đối với các bài đăng trên blog 'bình thường' của tôi, phân trang hoạt động chính xác như dự định.

Đây là mã hiện tại mà tôi đang sử dụng cho loại bài đăng tùy chỉnh của mình:

<?php if ( have_posts() ) : ?>
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts('post_type=videos&posts_per_page=9&paged=$paged'); ?>

    <?php /* Start the Loop */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

Mọi sự trợ giúp sẽ rất được trân trọng.


Câu trả lời:


18

Tại sao mã hiện tại của bạn không thành công

Việc bạn luôn luôn nhận được nội dung của trang đầu tiên, bởi vì chuỗi các tham số được chuyển sang query_postsđược gói gọn trong các dấu ngoặc đơn sẽ ngăn các biến (cũng như các chuỗi thoát cho các ký tự đặc biệt khác $) được mở rộng.

query_posts("post_type=videos&posts_per_page=9&paged=$paged"); sẽ quan tâm đến vấn đề đó.

query_posts('post_type=videos&posts_per_page=9&paged='.$paged); cũng sẽ

Và cuối cùng, việc truyền một loạt các đối số hỗn hợp thay vì chuỗi kiểu truy vấn URL cũng sẽ như vậy.

Mặc dù vậy, bạn không nên sử dụng query_posts :

Làm thế nào nó nên được thực hiện

Theo nhận xét của bạn, bạn đã cố gắng sử dụng get_posts.
Đó thực sự là một chức năng rất hữu ích, nhưng không phải là cách chính xác nếu bạn muốn sử dụng WordPress-Loop sau đó. get_poststrả về một mảng các đối tượng bài - thuộc tính của WP_Queryđối tượng posts. Nhưng chỉ có một tài sản đó, không có tất cả các tính năng và phương pháp khác, WP_Querycung cấp.

Do đó, để đi với đoạn mã trên của bạn, hãy làm một cái gì đó dọc theo dòng này:

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
    $args = array(
        'post_type' => 'videos',
        'posts_per_page' => 9,
        'paged' => $paged
    );
    $your_query = new WP_Query( $args );

    if ( $your_query->have_posts() ) {
        /* The Loop */
        while ( $your_query->have_posts() ) {
            $your_query->the_post();
            // do something
        }
    } else {
        echo 'Sorry, no posts found.';
    }
?>

1
Cảm ơn rất nhiều vì điều đó, đọc thú vị. Tuy nhiên, vui lòng bạn có thể cung cấp giải pháp thay thế bằng phương thức get_posts (). Có đơn giản như: <? Php $ paged = (get_query_var ('paged'))? get_query_var ('phân trang'): 1; get_posts ("post_type = videos & post_per_page = 9 & paged = $ paged"); ?> Điều đó không thực sự hiệu quả với tôi nhưng đó có thể là do mã ở nơi khác?
Johnny

1
Xem câu trả lời cập nhật.
Julian Pille

2
Cảm ơn bạn rất nhiều vì đã dành thời gian để chỉ cho tôi cách sử dụng này. Tôi rất trân trọng điều này.
Johnny
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.