Làm thế nào để xác định nếu có một trang tiếp theo


16

Tôi chưa quen với việc phát triển wordpress, chỉ cần cố gắng chuyển đổi HTML của mình thành chủ đề WordPress, tôi bắt đầu với chủ đề trống của Chris Coyer.

<div class="navigation">
    <div class="next-posts">
        <?php next_posts_link('&laquo; Older Entries') ?>
    </div>
    <div class="prev-posts">
        <?php previous_posts_link('Newer Entries &raquo;') ?>
    </div>
</div>

Làm thế nào tôi có thể xuất div chỉ khi có a next_posts_link(). Tôi cần điều này vì tôi sẽ sử dụng <ul>cho phân trang của mình. Nếu tôi không làm điều đó, tôi sẽ nhận được một viên đạn rỗng

Câu trả lời:


18

Bạn có thể sử dụng get_previous_posts_linkget_next_posts_link để xác định xem chúng có tồn tại như thế này không:

$prev_link = get_previous_posts_link(__('&laquo; Older Entries'));
$next_link = get_next_posts_link(__('Newer Entries &raquo;'));
// as suggested in comments
if ($prev_link || $next_link) {
  echo '<ul class="navigation">';
  if ($prev_link){
    echo '<li>'.$prev_link .'</li>';
  }
  if ($next_link){
    echo '<li>'.$next_link .'</li>';
  }
  echo '</ul>';
}

Hi vọng điêu nay co ich


Chỉ có vấn đề là bạn có khả năng hiển thị một danh sách trống, sẽ tạo ra đánh dấu không hợp lệ và thực tế sẽ có cùng một vấn đề mà người dùng gặp phải với mã hiện tại ..
t31os

3
@ t31os, tôi đoán tôi sẽ làm một cái gì đó giống nhưif ($prev_link || $next_link) // output ul
Jiew Meng

Vâng, điều đó sẽ làm điều đó ..;)
t31os

Đã cập nhật mã
BaiNET

Cảm ơn mã, nó bị thiếu echo '</ul>';ngay trước dòng cuối btw.
Davey

13

Tôi đã viết điều này một lúc trước, nhưng vẫn còn hiệu lực:

http://www.ericmmartin.com/conditable-pagepost-navlation-links-in-wordpress-redux/

Bạn có thể thêm chức năng sau vào functions.phptệp của mình :

/**
 * If more than one page exists, return TRUE.
 */
function show_posts_nav() {
    global $wp_query;
    return ($wp_query->max_num_pages > 1);
}

Bản cập nhật mã của bạn thành:

<?php if (show_posts_nav()) : ?>
<div class="navigation">
    <div class="next-posts"><?php next_posts_link('&laquo; Older Entries') ?></div>
    <div class="prev-posts"><?php previous_posts_link('Newer Entries &raquo;') ?></div>
</div>
<?php endif; ?>

3

giải pháp tốt nhất là kiểm tra $wp_query->max_num_pages, nhưng bạn cũng có thể sử dụng:

<?php
if(paginate_links()) {
...
}

1
Điều quan trọng cần lưu ý là $wp_querydường như không có sẵn ở mọi nơi; ví dụ: tôi đã cố sử dụng nó trong phần ghi đè mẫu WooC Commerce và đối tượng không tồn tại, vì vậy tôi phải gọi nó từ bên trong functions.phpbằng cách sử dụng câu trả lời của Eric Martin.
Brett

Tất nhiên, một số trường hợp như vòng lặp tùy chỉnh và có thể thương mại điện tử cần phải được xử lý. Trong trường hợp của bạn, bạn nên kiểm tra cách lấy Truy vấn wp của thương mại điện tử hoặc bất kỳ truy vấn nào mà nó tạo ra.
Maxwell sc
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.