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

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


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; ?>

3

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

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.