Cómo determinar si hay una página siguiente

16

Soy nuevo en el desarrollo de WordPress, solo tratando de convertir mi HTML en un tema de WordPress, comencé con el tema en blanco 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>

¿Cómo puedo generar el div solo si hay un next_posts_link(). Necesito esto ya que lo usaré <ul>para mi paginación. Si no hago eso, obtendré una bala vacía

Jiew Meng
fuente

Respuestas:

18

Puede usar get_previous_posts_linky get_next_posts_link para determinar si existen así:

$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 esto ayude

Bainternet
fuente
El único problema que hay que potencialmente podría hacer una lista vacía, que producirá el marcado no válido y, de hecho tendrán el mismo problema que el usuario tiene con el código existente ..
t31os
3
@ t31os, supongo que haré algo comoif ($prev_link || $next_link) // output ul
Jiew Meng
Sí, eso lo haría ...;)
t31os
Actualizado el código
Bainternet
Gracias por el código, falta echo '</ul>';justo antes de la última línea por cierto.
Davey
13

Escribí esto hace un tiempo, pero aún debería ser válido:

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

Puede agregar la siguiente función a su functions.phparchivo:

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

Actualiza tu código a:

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

la mejor solución es verificar $wp_query->max_num_pages, pero también puede usar:

<?php
if(paginate_links()) {
...
}
Maxwell sc
fuente
1
Es importante tener en cuenta que $wp_queryno parece estar disponible en todas partes; por ejemplo, intenté usarlo dentro de una anulación de plantilla de WooCommerce y el objeto no existía, así que tuve que llamarlo desde dentro functions.phpusando la respuesta de Eric Martin.
Brett
Por supuesto, algunos casos, como los bucles personalizados y quizás el woocommerce, deben manejarse. En su caso, debe verificar cómo obtener la consulta wp de woocommerce o cualquier consulta que genere.
Maxwell sc