Cara menentukan apakah ada halaman berikutnya

16

Saya baru mengenal pengembangan wordpress, hanya mencoba mengubah HTML saya menjadi tema WordPress, saya mulai dengan tema kosong 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>

Bagaimana saya bisa menghasilkan div hanya jika ada next_posts_link(). Saya membutuhkan ini karena saya akan menggunakan <ul>untuk pagination saya. Jika saya tidak melakukan itu, saya akan mendapatkan peluru kosong

Jiew Meng
sumber

Jawaban:

18

Anda dapat menggunakan get_previous_posts_linkdan get_next_posts_link untuk menentukan apakah mereka ada seperti ini:

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

Semoga ini membantu

Bainternet
sumber
Satu-satunya masalah adalah Anda mungkin berpotensi membuat daftar kosong, yang akan menghasilkan markup yang tidak valid, dan pada dasarnya akan memiliki masalah yang sama dengan yang dimiliki pengguna dengan kode yang ada ..
t31os
3
@ t31os, saya kira saya akan melakukan sesuatu sepertiif ($prev_link || $next_link) // output ul
Jiew Meng
Ya itu akan melakukannya ..;)
t31os
Diperbarui kode
Bainternet
Terima kasih untuk kodenya, itu hilang echo '</ul>';tepat sebelum baris terakhir btw.
Davey
13

Saya menulis ini beberapa waktu yang lalu, tetapi masih harus valid:

http://www.ericmmartin.com/conditional-pagepost-navigation-links-in-wordpress-redux/

Anda dapat menambahkan fungsi berikut ke functions.phpfile Anda :

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

Perbarui kode Anda ke:

<?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; ?>
Eric Martin
sumber
3

solusi terbaik adalah memeriksa $wp_query->max_num_pages, tetapi Anda juga dapat menggunakan:

<?php
if(paginate_links()) {
...
}
Maxwell sc
sumber
1
Penting untuk dicatat bahwa $wp_querytampaknya tidak tersedia di mana-mana; misalnya, saya mencoba menggunakannya di dalam template WooCommerce dan objek tidak ada, jadi saya harus menyebutnya dari dalam functions.phpdengan menggunakan jawaban Eric Martin.
Brett
Tentu saja, beberapa kasus seperti loop kustom dan mungkin woocommerce perlu ditangani. Dalam kasus Anda, Anda harus memeriksa cara mendapatkan kueri wp dari woocommerce atau permintaan apa pun yang dihasilkannya.
Maxwell sc