web-dev-qa-db-ja.com

ホームページの最初のページから最初の5件の投稿を除外しようとしています

ホームページの最初のページから最初の5つの投稿を除外しようとしていますが、正しく表示できません。これは私がフォローしたいパターンです。

  • ページ1:投稿5、投稿6、投稿7、投稿8、投稿9
  • ページ2:投稿10、投稿11、投稿12、投稿13、投稿14
  • ページ3:ポスト15、ポスト16、電気ショック療法。
  • ページn =投稿(n-1)、投稿n、投稿(n + 1)(数学用語)

それで、私はpre_get_postsフックを使おうとし、そして私の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' );

最初の5つの投稿は除外されますが、すべてのページで同じ投稿が繰り返されるため、これは部分的に機能します。したがって、探しているパターンには従いません。

これは私のループファイルで、基本的にすべての作業を行います。これは、single.phpが基本的にすべてを処理するためにループファイルを呼び出すためです。これは変更されていないファイルです。私はnew WP_Queryを追加しようとしましたが、うまく機能しなかったので、ここでは何も編集しません。

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

任意の助けやアドバイスは大歓迎です。

2
user1903782

offsetはページ付けをオーバーライドします。クエリレベルに到達すると、offsetによってページ付けされるからです。

あなたはまだoffsetを使うことができます、しかしあなたは現在のページ番号であなたの望むオフセットを掛けるために若干の数学をしなければなりません。両者が異なる場合の計算)

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' );

ページ数が正しいようにfound_postsをEDITフィルタリングします。

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 );
4
Milo