web-dev-qa-db-ja.com

ページングされたページで$ wp_query-> current_postがゼロから再オープンする

を使用してループを実行するときに、現在の投稿の「インデックス」を追跡する方法を知っています

$wp_query->current_post

これにより、後続のページ付きページでカウントがゼロから再開されます。したがって、私が20の投稿を持っていて、1ページに5つの投稿を表示している場合は、2ページで5-9ではなく0-4の番号が付けられます。

私の質問は、ページングされたページでループを実行するときに絶対インデックスを取得する方法を構築することですか、それともページ番号とページごとの投稿に関する情報を使用して自分でオフセットを計算する必要がありますか。

2
mikkelbreum

$wp_query->current_postは、グローバルな投稿のセットではなく、現在の投稿のループに関する情報を保持します。複数のページにまたがる投稿の数を数えることは(私が知る限りでは)ネイティブには利用できず、おそらく信頼できないでしょう(たとえば、ページあたりの投稿数の変更が不均等になるようにカスタマイズされる場合)。

特定の実装では、ページ番号に基づくカスタムの番号付けを構築することは、おそらく本当に唯一の選択肢です。

付箋に関しては、あなたはcount( get_option('sticky_posts') )のようなものでそれらのカウントを検索し、それによってあなたの番号付けを調整することができます。

3
Rarst

うまくいけば、誰かがより良い答えを提供するでしょうが、今のところ私はこれをやっています:

// We're about top start The Loop.
// Setting up a counter to keep track of the posts being processed
// We can't just use current_post as it start from zero on subsequent paged pages.

$paged_no = ($wp_query->query_vars['paged'] < 2 ) ? 0 : $wp_query->query_vars['paged'] -1 ;
$current_offset = $paged_no * $wp_query->query_vars['posts_per_page'];

そしてループの中で:

$absolute_post_index = $wp_query->current_post+$current_offset+1;

これは付箋がない場合に機能します。もしあれば、それらは最初のページに貼り付けられます。つまり、1ページに5つの投稿と1つのスティッキー投稿がある場合、最初のページには6つの投稿が表示され、それ以降のページには5つの投稿が表示されます。このシナリオでは、スティッキポストは考慮されなくなったため、ページ1にはポスト0〜5の番号が付けられ、ページ2には5〜9の番号が付けられます。 1ページ目の最後の投稿と2ページ目の最初の投稿で同じインデックスが繰り返されることになるので、これは問題です。

2
mikkelbreum