web-dev-qa-db-ja.com

付箋が2回現れる

ループ内の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は実際の数のスティッキポストを持ちます。

1
Alvaro

あなたが説明するのは問題ではなく、通常の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/

1
user2019515

もっと正しいのはsetメソッドを使うことです。

function posts_per_page($query) {
    $query->set('posts_per_page',3);
}
add_filter('pre_get_posts', 'posts_per_page', 11);

試してみてください。

注:私はこの複数の付箋問題を再現することはできません。それでも問題が解決しない場合は、より詳細に質問を編集してください。それはテーマ特有のものか、あるいはプラグインによるものかもしれません。

0
s_ha_dum