WordPressのテーマ開発において、ループは記事や投稿の情報を繰り返し表示するための心臓部です。このループ内で、「今、何番目の記事を処理しているか」という回数(インデックス)を取得することもあるんじゃないでしょうか。
WordPressの基本的な関数だけでも回数を取得する術はありますが、より柔軟で再利用性の高いコードを目指すなら、今回の記事をぜひチェックしてくださいね。
カスタム関数によるループ回数取得テクニック
特定の処理を汎用的に利用したい場合、独自のカスタム関数を functions.php に記述するのが最もスマートな方法です。①カスタム関数の記述(functions.php)
以下のコードを、あなたが開発しているテーマの functions.php ファイルへ追加してください。この記述により、どこからでも現在のループ回数を呼び出すことが可能になります。|
1 2 3 4 5 6 7 8 9 10 11 12 |
/ * 現在のWordPressループの回数(1から始まる連番)を取得する * * @return int 現在のループ回数 */ function get_current_loop_count() { // $wp_query グローバル変数にアクセス global $wp_query; // current_post は 0 から始まるため、 +1 して 1 から始まる連番にする // 取得失敗やループ外での呼び出しに備え、三項演算子で安全性を確保 return isset($wp_query->current_post) ? $wp_query->current_post + 1 : 0; } |
注意点
ループ絡みの処理でよく見かける$wp_query->current_post+1 は、安全性を考慮するなら isset() などで変数が存在するか確認してから利用するのがいいでしょう。②テンプレートファイルでの使用方法
テーマの index.php や archive.php など、実際にループが動作しているテンプレートファイル内で、以下のように記述します。|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <?php $loop_count = get_current_loop_count(); echo ''; // コメントアウトで確認 ?> <?php if ( $loop_count % 3 === 1 ) : ?> <div class="special-group-start"> <?php endif; ?> <div class="post-item post-item-<?php echo $loop_count; ?>"> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <?php the_excerpt(); ?> </div> <?php if ( $loop_count % 3 === 0 ) : ?> </div><?php endif; ?> </article> <?php endwhile; ?> <?php else : ?> <p>記事が見つかりませんでした。</p> <?php endif; ?> |
この例では、取得した $loop_count を利用して、記事を3つごとにグループ化するような複雑なレイアウト処理を実現できます。
「回数が3で割り切れるか?」といった判定も、この関数のおかげで非常に容易になりますね。
なぜ $wp_query->current_post を使うのか?
WordPressには、$wp_query というグローバルオブジェクトがあり、これはメインクエリ(現在のページで表示する投稿一覧)のすべての情報を保持しています。この $wp_query オブジェクトが持つプロパティの一つに、
current_post があるんです。重要な点は、この値が「0から始まる」ということ。つまり、1番目の記事では 0、2番目の記事では 1 となる仕様です。
なので、ユーザーが直感的に理解できる「1から始まる回数」として使いたい場合、+ 1 をして返す処理が必要になるんですね。
他の回数取得方法との比較
WordPressでループの回数を取得する方法は他にもあります。例えば、 while ループに入る前にPHPのカウンタ変数を定義し、ループ内でインクリメント($count++)する方法です。| 比較項目 | $wp_query->current_post + 1 (推奨) | カウンタ変数 $count++ |
|---|---|---|
| 信頼性 | 高い(WordPressコアが管理) | 環境によっては予期せぬ挙動のリスクあり |
| 記述量 | 関数化すれば少ない | 毎回変数の定義とインクリメントが必要 |
| 再利用性 | 高い(どのテンプレートでも呼び出し可能) | 低い(そのループ内でしか使えない) |
| メンテナンス性 | 非常に高い(コア変数を参照している) | 変数名の衝突やリセット忘れに注意が必要 |
独自のカウンタ変数を使う方法は一見シンプルですが、複数のループがネスト(入れ子)になった場合や、開発者が複数関わっているプロジェクトでは、変数名の管理やリセット処理を忘れがちです。
一方、
$wp_query->current_post は、WordPressのコアな処理状況を反映しているため、安定性と信頼性が極めて高いのが特徴と言えるでしょう。【まとめ】
今回は、WordPressのループ回数を取得するカスタム関数get_current_loop_count() の実装と、その背後にある技術的な根拠について詳しく解説しました。以下、まとめです。| ステップ | アクション | 重要なポイント |
|---|---|---|
| 1. 関数定義 | functions.php にコードを記述 | $wp_query->current_post + 1 が肝心 |
| 2. テンプレート適用 | The Loop内で get_current_loop_count() を呼び出し | 変数 $loop_count に代入して活用する |
| 3. 応用 | 取得した回数で条件分岐(if, switch)を実装 | CSSクラスの付与やレイアウト調整に役立てる |


コメント