ホームページの最初のページから最初の5つの投稿を除外しようとしていますが、正しく表示できません。これは私がフォローしたいパターンです。
それで、私は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 <?php the_category(', '); ?>
<?php if(comments_open( get_the_ID() )) {
?> | <?php comments_popup_link( 0, 1, '%' ); ?> Comentario(s) <?php
}
edit_post_link( $SMTheme->_( 'edit' ), ' | <span class="edit-link"> ', '</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', '← %title', true); ?></div>
<div class="alignright"><?php next_post_link('%link', '%title →', true); ?></div>
</div>
<?php } ?>
<?php wp_link_pages(); ?>
</div>
</div>
<?php endwhile; ?>
<?php if (!isset($_GET['ajaxpage'])) {?>
</div>
<?php } ?>
<?php endif; ?>
任意の助けやアドバイスは大歓迎です。
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 );