Soporte » Diseño – Temas y plantillas » Limitar slider a mostrar 5 posts y mostrar los siguientes 5 en la portada

  • Resuelto BGH_

    (@bgh_)


    Hola a todos,

    Quisiera saber si existe manera de limitar el contenido del slider y del homepage. Mi idea es mostrar en la portada los 10 posts más recientes (sin importar categoría), del siguiente modo: 5 en el slider, y los siguientes 5 como posts en la portada. Es decir, que a partir del sexto post, los cinco posts restantes se muestren en la portada como posts recientes.

    Uso un theme de SMTheme, pero al configurarlo correctamente, me muestra los 5 posts que configuré, y debajo en la portada, muestra los 10 posts en total, lo cual no es lo que estoy necesitando.

    ¿Es posible llevar a cabo esta tarea?

    Gracias de antemano!

    Saludos

    PD: Edito agregando el código que creo puede modificarse para lograr lo que quiero. este es mi archivo top.php:

    <?php
    	global $post, $query_string, $SMTheme;
    	query_posts($query_string);
    	$i=1;
    	if (have_posts()) :  
    
    	if (!isset($_GET['ajaxpage'])) {?>
     <div class='articles'>
    	<?php }
    	while (have_posts()) : the_post();
    	?>
Viendo 8 respuestas - de la 1 a la 8 (de un total de 8)
  • Iniciador del debate BGH_

    (@bgh_)

    Lo solucioné yo mismo! Cambié el código del primer post, por el siguiente:

    <?php
    	global $post, $query_string, $SMTheme;
    	query_posts($query_string);
    	$i=1;
    	$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    	$offset = $posts_per_page * ($paged - 1) + 5;
    	$args = array(
    	'paged' => $paged,
    	'offset' => $offset,
    );
    query_posts($args);
    	if (have_posts()) :  
    
    	if (!isset($_GET['ajaxpage'])) {?>
     <div class='articles'>
    	<?php }
    	while (have_posts()) : the_post();
    	?>

    Es decir, introducir el código añadido al original aquí, inmediatamente antes de if (have_posts()), respetando la estructura del código original.

    Espero que les sea útil.

    Saludos!

    Iniciador del debate BGH_

    (@bgh_)

    Perdón por el 3er post seguido, pero luego de varios intentos el código funciona bien solo en la portada, no así en las entradas ya que en la entrada se ve como si fuera una lista de entradas similar a la de la portada. Por lo que no funciona adecuadamente.

    Alguna otra solución?

    Tienes que modificar también el archivo de entradas y de hecho todos en los que quieres que así se comporte.

    Saludos.

    Iniciador del debate BGH_

    (@bgh_)

    Hola Peter, gracias por responder!

    Te refieres al archivo single.php? El problema es que mi archivo single.php, relega toda la información de mi archivo theloop.php (al que cuyo código en el primer post pertenece, no así top.php, fue un error mío y no lo pude editar ese posts).

    Yo solo quiero que se comporte así en la portada, no en las entradas.

    Este es mi archivo single.php:

    <?php
    	global $SMTheme;
    	get_header(); 
    
    	get_template_part('theloop');
    
    	the_tags("<div class='tags'><span>".$SMTheme->_( 'tags' ).":&nbsp;&nbsp;</span>", ", ","</div>");
    
    	get_template_part('relatedposts');
    
    	comments_template();
    
    	get_template_part('navigation');
    
    	get_footer();
    ?>

    Saludos!

    Entonces es archive.php o el que utilice tu tema y si esos archivos llaman a otro, pues ese otro.

    Como te puse arriba.

    Tienes que modificar también el archivo de entradas y de hecho todos en los que quieres que así se comporte.

    Saludos.

    Iniciador del debate BGH_

    (@bgh_)

    Intenté hacer agregar el código en single.php y en archive.php. No dio resultado.

    Ahora, probé con otro código en theloop.php:

    query_posts($query_string . ‘offset=5’);

    Esto es lo que funciona más cercanamente a lo que apunto, el problema es que las 2 primeras páginas de la portada son iguales, y recién en la tercera página sigue el patrón correcto. Ejemplo de cómo se ve:

    Página 1: 6,7,8,9,10.

    Página 2: 6,7,8,9,10.

    Página 3: 11,12,13,14,15

    Página 4: 16,17…

    Además cuando estoy en la página 2 y hago click en Anterior (en la navegación), me muestra la página 1 sin cambios, como si el código que agregara no existiera.

    Iniciador del debate BGH_

    (@bgh_)

    Bueno parece que di en el blanco esta vez, modificando el código de mi segundo post, con el siguiente código:

    <?php
    	global $post, $query_string, $SMTheme;
    	query_posts($query_string);
    	$i=1;
    	$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $posts_per_page = 5;
    $offset = $posts_per_page * ($paged - 1) + 5;
    $args = array(
      'posts_per_page' => $posts_per_page,
      'paged' => $paged,
      'offset' => $offset,
    );
    	if (is_home()||is_front_page())
    	query_posts($args);
    	if (have_posts()) :  
    
    	if (!isset($_GET['ajaxpage'])) {?>
     <div class='articles'>
    	<?php }
    	while (have_posts()) : the_post();
    	?>

    En principio, funciona al 100%, hace lo que deseo (ocultar los primeros 5 posts en la 1era página), y al hacer clic en los artículos, estos se muestran correctamente.

    Habrá algún problema a futuro por usar dos instancias de query_posts? Alguna exigencia extra a la base de datos?

    De nuevo, pido disculpas por hacer posts seguidos, pero quería compartir mi solución. Si algún moderador considera unirlos, está todo bien :).

    No hay problema. Gracias por compartir la solución, por favor marca el tema como resuelto.

    Saludos.

Viendo 8 respuestas - de la 1 a la 8 (de un total de 8)
  • El debate ‘Limitar slider a mostrar 5 posts y mostrar los siguientes 5 en la portada’ está cerrado a nuevas respuestas.