Como determinar se há uma próxima página

16

Eu sou novo no desenvolvimento wordpress, apenas tentando converter meu HTML em um tema WordPress, comecei com o tema em branco de 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>

Como posso gerar o div apenas se houver um next_posts_link(). Preciso disso, pois <ul>usarei para minha paginação. Se eu não fizer isso, vou receber uma bala vazia

Jiew Meng
fonte

Respostas:

18

Você pode usar get_previous_posts_linke get_next_posts_link determinar se eles existem assim:

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

Espero que isto ajude

Bainternet
fonte
Único problema é que você pode potencialmente tornar uma lista vazia, que irá produzir a marcação inválida, e, com efeito terá o mesmo problema que o usuário tem com o código existente ..
t31os
3
@ t31os, eu acho que vai fazer algo assimif ($prev_link || $next_link) // output ul
Jiew Meng
Sim, isso faria isso
;;
Atualizado o código
Bainternet 12/02/11
Obrigado pelo código, ele está faltando echo '</ul>';pouco antes da última linha btw.
Davey
13

Eu escrevi isso há um tempo atrás, mas ainda deve ser válido:

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

Você pode adicionar a seguinte função ao seu functions.phparquivo:

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

A atualização do seu código para:

<?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
fonte
3

a melhor solução é verificar $wp_query->max_num_pages, mas você também pode usar:

<?php
if(paginate_links()) {
...
}
Maxwell sc
fonte
1
É importante observar que $wp_querynão parece estar disponível em todos os lugares; por exemplo, tentei usá-lo em uma substituição de modelo do WooCommerce e o objeto não existia, então tive que chamá-lo de dentro functions.phpusando a resposta de Eric Martin.
Brett
Obviamente, alguns casos, como loops personalizados e talvez woocommerce, precisam ser tratados. No seu caso, você deve verificar como obter a consulta wp do woocommerce ou qualquer consulta que ele gerar.
Maxwell sc