ループ内のposts_per_pageの数を変更しようとしています。こちらです:
function posts_per_page($query) {
$query->query_vars['posts_per_page'] = 3;
}
add_filter('pre_get_posts', 'posts_per_page', 11);
私が持っている問題は私がそうするとき、それから粘着性のあるポストがループの中に二度現われるということです:最初のものはループの始めにそして二番目のものは元の位置に。したがって、この場合、最初のページには4つの投稿があり(スティッキなしの3つのループ+スティッキー投稿)、そのスティッキー投稿は他の2つの投稿と共に(また)後で表示されます。
編集:解決策
かなりの調査をした後、私はスティッキーポストが常に最初のページに現れることに気づきました。元の付箋記事がすでに最初のページに表示されている場合は、付箋だけが表示されます(この投稿は1つだけ表示されます)。私は私の質問にいくつの投稿があるのか正確に知る必要がありました、しかし$ wp_query-> found_postsはスティッキー投稿を数えていませんでした。そして$ wp_query-> found_posts + get_option( 'sticky_posts')を実行したとしても、先ほど言った '最初のページからのスティッキーポスト'については考慮していないので、正しくないでしょう。
$ wp_query-> postsを使うと、最初のページに実際の投稿数が得られるので、
$sticky = count($wp_query->posts) - get_option( 'posts_per_page' );
if ($sticky<0) {$sticky=0;}//In case there is only one page of results
これで$ stickyは実際の数のスティッキポストを持ちます。
あなたが説明するのは問題ではなく、通常のWordPressの動作です。投稿をスティッキーとしてマークすると、リストの先頭に表示され、、元の投稿位置にも表示されます(元の位置が最初のページにない場合)。付箋は投稿の上部と元の位置に表示されますが、同じページに2回表示されることはありません。
あなたはこのようなことをしたいかもしれません:
<?php
while (have_posts()) : the_post();
if ( !in_array( $post->ID, $do_not_duplicate ) ) { // check IDs
// display posts ...
the_title();
//store id in "do not duplicate
$do_not_duplicate = $post->ID;
}
endwhile;
?>
細かい編集を加えたソース: http://wpengineer.com/1719/filter-duplicate-posts-in-the-loop/
もっと正しいのはset
メソッドを使うことです。
function posts_per_page($query) {
$query->set('posts_per_page',3);
}
add_filter('pre_get_posts', 'posts_per_page', 11);
試してみてください。
注:私はこの複数の付箋問題を再現することはできません。それでも問題が解決しない場合は、より詳細に質問を編集してください。それはテーマ特有のものか、あるいはプラグインによるものかもしれません。