3週間前の この記事の と同じ問題を抱えていますが、それ以降に何が起こったのか説明しましょう。
私はもともとフロントページの一番上に最新のスティッキーポストを表示するために1つのループを使用していました。これが現状のコードです。
// first loop to display only my single, MOST RECENT sticky post
$sticky = get_option('sticky_posts');
$wp_query = new WP_Query(array('post__in' => $sticky, 'caller_get_posts' => 1, 'orderby' => ID, 'showposts' => 1)); ?>
<?php while (have_posts()) : the_post(); ?>
<!-- loop code -->
<?php endwhile; wp_reset_query(); ?>
// second loop to display every other post, excluding sticky posts
<?php query_posts(array('post__not_in' => get_option('sticky_posts'))); // exclude all sticky posts ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<!-- loop code -->
<?php endif; wp_reset_query(); ?>
ここで起こっていることは完璧です...フロントページだけのために。私は一番上に私のニースの単一/最新の付箋投稿を受け取り、その後にさらに5つの投稿が続きます。残念ながら、2、3、4などのページにページオーバーしても、フロントページのスティッキーポストの下にあるのと同じ5つの投稿しか表示されません。
私は多重ループの概念を持っているのでまったく新しいので、ここで本当に手を使うことができました!
前もって感謝します :)
私はあなたの問題におそらく寄与しているいくつかの問題を見ます:
query_posts()
を使用することだけです。caller_get_posts
パラメータは推奨されなくなりました 。ignore_sticky_posts
のために$wp_query
変数は定義済みグローバルです。本来の用途以外で使用すると、意図しない状況を引き起こす可能性があります。それで、最初に、どちらがあなたの主要なループであるかを決定する必要があります。これを2番目のループと見なします。
次に、$most_recent_sticky_post
のように、あなたの二次ループのためのユニークでわかりやすい名前(つまりあなたの最初ループ)を思いついてください。
それはあなたに任せるべきです:
<?php
// Get IDs of sticky posts
$sticky = get_option('sticky_posts');
// first loop to display only my single,
// MOST RECENT sticky post
$most_recent_sticky_post = new WP_Query( array(
// Only sticky posts
'post__in' => $sticky,
// Treat them as sticky posts
'ignore_sticky_posts' => 0,
// Order by ID
'orderby' => ID,
// Get only the one most recent
'showposts' => 1
) );
while ( $most_recent_sticky_post->have_posts() ) : $most_recent_sticky_post->the_post(); ?>
<!-- loop code -->
<?php endwhile; wp_reset_query(); ?>
// second loop to display every other post,
// excluding sticky posts
<?php
query_posts( array(
// exclude all sticky posts
'post__not_in' => get_option( 'sticky_posts' )
) );
if (have_posts()) : while (have_posts()) : the_post(); ?>
<!-- loop code -->
<?php endif; wp_reset_query(); ?>
さて、あなたはもはや$wp_query
に踏み込んでいないので、あなたのページ付けは正しく動くはずです。
さて、他のもの:
showposts
パラメータはでも推奨されていません。代わりにpost_per_page
を使用してください。例えば。:
// Define custom query args
$custom_query_args = array(
// exclude all sticky posts
'post__not_in' => get_option( 'sticky_posts' )
);
// globalize $wp_query
global $wp_query;
// Merge custom args with default query args
$merged_query_args = array_merge( $wp_query->query, $custom_query_args );
// process the query
query_posts( $merged_query_args );
これによって違いが生じることはわかりませんが、この方法でデフォルトのクエリを変更することをお勧めします。
query_posts()
に強制的に記憶させてください。 'paged' => get_query_var('paged')
を$custom_query_args
配列に追加します。例えば.
// Define custom query args
$custom_query_args = array(
// exclude all sticky posts
'post__not_in' => get_option( 'sticky_posts' ),
// don't forget to paginate!
'paged' => get_query_var('paged')
);
それは私たちをどこに導きますか?
WP_Queryでページングパラメータを使用してはいけません
$posts = new WP_Query( array( /*your args here*/, 'paged' => get_query_var( 'page' ) ) );
WPバージョンによってはget_query_var( 'paged')になると思います。