web-dev-qa-db-ja.com

ページ投稿数にスティッキ投稿を含めますか?

私のホームページに7の投稿を表示させたい。それらを貼り付けることによって手動でそれらの投稿を選択できるようにしたいです。

現在、WP Adminでページごとの投稿を '7'に設定しています。ただし、これにはスティッキポストは含まれていません。現在、7スティッキポスト+ 7個の最新の公開ポストが合計14で表示されています。

1ページあたりの投稿数にスティッキー投稿を含めるにはどうすればよいですか。

2
Travis Patron

これは実行可能です、そして私がコメントで述べたように、あなたは以下のステップに従う必要があります

  • 付箋の数を数えます。これは単にスティッキポストのIDを配列の形で保持するget_option( 'sticky_posts' )を数えることで行うことができます。

  • 1ページあたりの投稿数も取得する必要があります。ここにハードコードしたくはありません。 1ページあたりの投稿数はget_option( 'posts_per_page' )に格納されているので、これを使用します。

  • ここで重要なのは、オフセットを利用してメインクエリから1ページに表示する投稿数を再計算することです。 OPの例のように、1ページあたりの投稿数が7に設定されていて4つのスティッキー投稿がある場合、メインクエリからの投稿は3つだけで、サイトのデフォルトとしての7つの投稿は必要ありません。 2ページから、ここにスティッキーな投稿はありませんので、メインのクエリから表示する通常の7投稿が必要になります。

  • ただし、このオフセットはメインクエリの$max_num_pagesプロパティの計算に影響を与えます。つまり、ほとんどの場合、最後のページが表示されません。これを修正するには、見つかった投稿数を調整する必要があります。基本的に、実際の投稿数にオフセットを追加してページ数を修正します。これはfound_postsフィルタを通して行われます

注:このコードはテストされ、動作しています

これがコードの基本的な考え方です。

add_action( 'pre_get_posts', function ( $q ) 
{

    if ( $q->is_main_query() && $q->is_home() ) {

        $count_stickies = count( get_option( 'sticky_posts' ) );
        $ppp = get_option( 'posts_per_page' );
        $offset = ( $count_stickies <= $ppp ) ? ( $ppp - ( $ppp - $count_stickies ) ) : $ppp;

        if (!$q->is_paged()) {
          $q->set('posts_per_page', ( $ppp - $offset ));
        } else {
          $offset = ( ($q->query_vars['paged']-1) * $ppp ) - $offset;
          $q->set('posts_per_page',$ppp);
          $q->set('offset',$offset);
        }

    }

});    

add_filter( 'found_posts', function ( $found_posts, $q ) 
{

    if( $q->is_main_query() && $q->is_home() ) {

        $count_stickies = count( get_option( 'sticky_posts' ) );
        $ppp = get_option( 'posts_per_page' );
        $offset = ( $count_stickies <= $ppp ) ? ( $ppp - ( $ppp - $count_stickies ) ) : $ppp;        

        $found_posts = $found_posts + $offset;
    }
    return $found_posts;

}, 10, 2 );     
5
Pieter Goosen