Intentando excluir las primeras 5 publicaciones de la primera página en la página de inicio

2

Estoy tratando de excluir las primeras 5 publicaciones de la primera página en la página de inicio, pero no puedo hacerlo bien. Este es el paterno que me gustaría seguir:

  • Página 1: Publicación 5, Publicación 6, Publicación 7, Publicación 8, Publicación 9
  • Página 2: Publicación 10, Publicación 11, Publicación 12, Publicación 13, Publicación 14
  • Página 3: Publicación 15, Publicación 16, ect.
  • Página n = Publicación (n-1), Publicación n, Publicación (n + 1) (en términos matemáticos)

Por lo tanto, traté de usar el enganche pre_get_posts, y agregué lo siguiente a mi archivo functions.php :

function my_function_for_excluding_posts( $query ) {
    if ($query->is_home() && $query->is_main_query()) {
        $query->set( 'offset', '5' );
    }
}
add_action( 'pre_get_posts', 'my_function_for_excluding_posts' );

Esto funciona en parte, ya que excluye las primeras cinco publicaciones, pero también repite las mismas publicaciones en cada página, y por lo tanto no sigue el patrón que estoy buscando.

Este es mi archivo de bucle, que básicamente hace todo el trabajo, ya que mi single.php simplemente llama al archivo de bucle para manejar todo, básicamente. Este es el archivo inalterado, ya que intenté agregar un new WP_Query , pero no funcionó bien, así que aquí va sin modificaciones:

<?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(); 
    ?>
        <div class='one-post'>
        <div id="post-<?php the_ID(); ?>" <?php post_class("post-caption"); ?>>     
            <?php if (!is_single()&&!is_page()) { ?>
            <h2><a href="<?php the_permalink(); ?>" title="<?php printf( $SMTheme->_( 'permalink' ), the_title_attribute( 'echo=0' ) ); ?>" class='post_ttl'><?php the_title(); ?></a></h2>
            <?php } else { ?>
                <?php if (!is_single()) {?><h1 style="text-align:center;border-bottom:1px solid;margin-top:-10px;max-width: 100%;"><?php the_title(); ?></h1>
                <?php } else { ?><h1><?php the_title(); ?></h1>
            <?php } ?>
            <?php } ?>

            <?php if (!is_page()) {?><p class='post-meta'>
                <span class='post-date'><span class="day"><?php echo get_the_date('d'); ?></span><br /><span class="month"><?php echo get_the_date('M'); ?></span><br /><span class="year"><?php echo get_the_date('Y'); ?></span></span>           
                Publicado en &nbsp;<?php the_category(', '); ?>
                <?php if(comments_open( get_the_ID() ))  {
                    ?> &nbsp;| &nbsp;<?php comments_popup_link( 0, 1, '%' ); ?> &nbsp;Comentario(s)&nbsp;<?php
                } 
                edit_post_link( $SMTheme->_( 'edit' ), '     |     <span class="edit-link">&nbsp;', '</span>' );
                ?>
            </p><?php } ?>
                        <?php
                if(has_post_thumbnail())  {
                    ?><?php if (!is_single()) { ?><a href="<?php the_permalink(); ?>" title="<?php printf( $SMTheme->_( 'permalink' ), the_title_attribute( 'echo=0' ) ); ?>"><?php the_post_thumbnail(
                        array($SMTheme->get( 'layout', 'imgwidth' ), $SMTheme->get( 'layout', 'imgheight' )),
                        array("class" => $SMTheme->get( 'layout','imgpos' ) . " featured_image")
                    ); ?></a><?php } else { ?>
                        <?php the_post_thumbnail(
                        array($SMTheme->get( 'layout', 'imgwidth' ), $SMTheme->get( 'layout', 'imgheight' )),
                        array("class" => $SMTheme->get( 'layout','imgpos' ) . " featured_image")
                    ); ?>
                    <?php }
                }
                ?>
        </div>
        <div class='post-body'>

                <?php
                if (!is_single()&&!is_page()) {
                    if ( ! post_password_required() ) { smtheme_excerpt('echo=1'); } else the_content('');
                    ?><a href='<?php the_permalink(); ?>' class='readmore'><?php echo $SMTheme->_( 'readmore' ); ?></a><?php
                } else {
                    the_content('');

                }
            ?>
        <?php if (is_single()) { ?>
        <div class="navigation">
                <div class="alignleft"> <?php previous_post_link('%link', '&larr; %title', true); ?></div>
                <div class="alignright"><?php next_post_link('%link', '%title &rarr;', true); ?></div>
        </div>
        <?php  } ?>         
            <?php wp_link_pages(); ?>           
        </div>      
        </div>

    <?php endwhile; ?>

    <?php if (!isset($_GET['ajaxpage'])) {?>
 </div>
    <?php } ?>


<?php endif; ?>

Cualquier ayuda o consejo será muy apreciado.

    
pregunta user1903782 02.11.2014 - 02:26

1 respuesta

4

offset anula la paginación, porque cuando llegas al nivel de consulta, se pagina a través de offset .

Aún puede usar offset , solo tiene que hacer algunos cálculos para multiplicar su desplazamiento deseado por el número de la página actual (tenga en cuenta que este cálculo funciona porque las publicaciones por página y el desplazamiento son ambos 5, es posible que tenga que usar el valor posts_per_page en su cálculo si los dos son diferentes):

function my_function_for_excluding_posts( $query ) {
    if ($query->is_home() && $query->is_main_query()) {
        $offset = 5;
        $paged = 0 == $query->get( 'paged' ) ? 1 : $query->get( 'paged' );
        $query->set( 'offset', $paged * $offset );
    }
}
add_action( 'pre_get_posts', 'my_function_for_excluding_posts' );

EDITAR - filtrar found_posts para que el número de páginas sea correcto.

function myprefix_adjust_offset_pagination($found_posts, $query) {
    if ( $query->is_home() && $query->is_main_query() ) {
        return $found_posts - 5;
    }
    return $found_posts;
}
add_filter('found_posts', 'myprefix_adjust_offset_pagination', 1, 2 );
    
respondido por el Milo 02.11.2014 - 02:54

Lea otras preguntas en las etiquetas