Añadir offset al loop y que funcione la paginación
-
¡Hola, buenas tardes!
Necesito ayuda con este error conocido. No funciona la paginación al añadir un offset en el loop. He probado varias soluciones pero no consigo dar con la tecla.
El la página de Noticias de la web, la primera noticia empieza a partir de la noticia número 7, porque las 6 primeras aparecen en la home.
La página de noticias utiliza la plantilla index.php.
He añadido el código
query_posts('posts_per_page=6&offset=6');
antes del loop para conseguir saltar las 6 primeras noticias, pero esto provoca que no funcione la paginación de las noticias.vaya al número que vaya, siempre me dirige a la página 1.
He probado a insertar este código en mi functions.php pero no pasa nada, supongo que tengo que personalizar algún código:
// Fix for offset wp query home add_action('pre_get_posts', 'myprefix_query_offset', 1 ); function myprefix_query_offset(&$query) { //Before anything else, make sure this is the right query... if ( ! $query->is_home() ) { return; } //First, define your desired offset... $offset = get_option('posts_per_page'); //Next, determine how many posts per page you want (we'll use WordPress's settings) $ppp = get_option('posts_per_page'); //Next, detect and handle pagination... if ( $query->is_paged && $query->is_main_query() ) { //Manually determine page query offset (offset + current page (minus one) x posts per page) $page_offset = $offset + ( ($query->query_vars['paged']-1) * $ppp ); //Apply adjust page offset $query->set('offset', $page_offset ); } else { if($query->is_main_query()) //This is the first page. Just use the offset... $query->set('offset',$offset); } }
Este es el código de las noticias en index.php:
<?php query_posts('posts_per_page=6&offset=6'); if (have_posts()) : // check where should sidebar be placed $page_id = get_the_ID(); $blog_style = $pi_theme_options['blog_style']; $page_sidebar = $pi_theme_options['blog_sidebar_position']; if ($blog_style == 'blog-post-full' || $blog_style == 'blog-post-masonry-full') { $page_sidebar = false; } if ($page_sidebar == 'left'): get_sidebar(); endif; $grid_size = ($blog_style == 'blog-post-full' || $blog_style == 'blog-post-masonry-full') ? 12 : 9; $ul_classes = array('grid_' . $grid_size, 'blog-posts', 'content-sidebar-' . $page_sidebar, $blog_style); if ($blog_style == 'blog-post-masonry-full') { $ul_classes[] = 'isotope'; $ul_classes[] = 'full'; $ul_id = "blogmasonry"; } elseif ($blog_style == 'blog-post-masonry') { $ul_classes[] = 'isotope'; $ul_classes[] = 'cols'; $ul_id = "blogmasonry"; } else { $ul_id = "classic-blog-layout"; } // get animation classes $animation = $pi_theme_options['blog_animation']; if ($animation != "disabled") { $ul_classes[] = 'triggerAnimation'; $ul_classes[] = 'animated'; $ul_classes[] = $animation; } ?> <!-- blog posts container start --> <ul id="<?php echo $ul_id; ?>" class="<?php echo join(' ', $ul_classes) ?>"> <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; while (have_posts()) : the_post(); $format = get_post_format(); get_template_part('content', $format); endwhile; ?> <?php pi_pagination('blog'); ?> </ul><!-- blog posts container end --> <?php if ($page_sidebar == 'right'): get_sidebar(); endif; else : ?> <div class="grid_12"> <h3><?php _e('No hay resultados', 'pi_framework') ?></h3> <p style="margin-bottom:40px"><?php _e('No se han encuentrado resultados para la búsqueda realizada.', 'pi_framework') ?></p> </div> <?php endif; ?>
Muchísimas gracias por tu ayuda.
Un saludo,
Ana
- El debate ‘Añadir offset al loop y que funcione la paginación’ está cerrado a nuevas respuestas.