Cómo determinar si hay una página siguiente

12 feb 2011, 13:56:15
Vistas: 30.5K
Votos: 18

Soy nuevo en el desarrollo de WordPress, estoy 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; Entradas Anteriores') ?>
    </div>
    <div class="prev-posts">
        <?php previous_posts_link('Entradas Nuevas &raquo;') ?>
    </div>
</div>

¿Cómo puedo mostrar el div solo si existe un next_posts_link()? Necesito esto ya que usaré <ul> para mi paginación. Si no lo hago, obtendré una viñeta vacía

0
Todas las respuestas a la pregunta 3
5
20

Puedes usar get_previous_posts_link y get_next_posts_link para determinar si existen de esta manera:

$prev_link = get_previous_posts_link(__('&laquo; Entradas más antiguas'));
$next_link = get_next_posts_link(__('Entradas más recientes &raquo;'));
// como se sugiere en los comentarios
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

12 feb 2011 14:12:00
Comentarios

El único problema es que potencialmente podrías renderizar una lista vacía, lo que generaría un marcado inválido, y en efecto tendría el mismo problema que el usuario tiene con el código actual.

t31os t31os
12 feb 2011 14:38:12

@t31os, supongo que haré algo como if ($prev_link || $next_link) // mostrar ul

Jiew Meng Jiew Meng
12 feb 2011 15:16:30

Sí, eso lo solucionaría.. ;)

t31os t31os
12 feb 2011 16:32:57

Actualizó el código

Bainternet Bainternet
12 feb 2011 19:49:38

Gracias por el código, por cierto falta echo '</ul>'; justo antes de la última línea.

Davey Davey
4 feb 2017 15:00:09
0
14

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

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

Puedes añadir la siguiente función a tu archivo functions.php:

/**
 * Si existe más de una página, retorna TRUE.
 */
function show_posts_nav() {
    global $wp_query;
    return ($wp_query->max_num_pages > 1);
}

Luego actualiza tu código a:

<?php if (show_posts_nav()) : ?>
<div class="navigation">
    <div class="next-posts"><?php next_posts_link('&laquo; Entradas más antiguas') ?></div>
    <div class="prev-posts"><?php previous_posts_link('Entradas más recientes &raquo;') ?></div>
</div>
<?php endif; ?>
13 feb 2011 00:45:03
2

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

<?php
if(paginate_links()) {
...
}
9 nov 2018 18:26:25
Comentarios

Es importante tener en cuenta que $wp_query no parece estar disponible en todas partes; por ejemplo, intenté usarlo dentro de una sobreescritura de plantilla de WooCommerce y el objeto no existía, así que tuve que llamarlo desde functions.php usando la respuesta de Eric Martin.

Brett Brett
27 ene 2019 21:40:42

Por supuesto, algunos casos como bucles personalizados y tal vez WooCommerce necesitan ser manejados. En tu caso, deberías ver cómo obtener la consulta wp de WooCommerce o cualquier consulta que genere.

Maxwell s.c Maxwell s.c
27 ene 2019 23:02:33