Wordpressの記事ループの中で、最初や最後の記事とかを判別する
<?php function isFirst(){ global $wp_query; return ($wp_query->current_post === 0); } function isLast(){ global $wp_query; return ($wp_query->current_post+1 === $wp_query->post_count); } function isOdd(){ global $wp_query; return ((($wp_query->current_post+1) % 2) === 1); } function isEvery(){ global $wp_query; return ((($wp_query->current_post+1) % 2) === 0); }
Wordpressのテンプレートで、記事を表示する部分は while(have_post()) でループして作ります。
最初のエントリーや最後のエントリーにだけ、ちょっと変える必要がでたんですが、Wordpressのテンプレートタグや関数では、判別方法が提供されてませんでした。
なので、作ってみました。
最初と最後のエントリーを判別する関数と、ついでに奇数番目と偶数番目のエントリーを判別する関数です。
見てのとおり大したことはしてません。
注意とか
ループ中に使用可能。
Wordpressのテンプレートタグには the_title() や the_content() のように、ループ中にのみ使用できる物が結構あります。
この判別用の関数も、同様にループ中にのみ使用できます。
動作確認
WordPress 2.9.1 でのみ確認してます。
もっといえば PDO (SQLite) For WordpressプラグインでWordpressをSQLiteで動かしてみた - kanonjiの日記 で構築した環境です。
導入方法
テーマにはたいていの場合 functions.php というファイルがあります。
このファイルは、自動的にWordpressの初期化中に読み込まれるので、ここに書いておけば使えると思います。
使用例
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div class="post <?php if(isLast()) echo 'last'; ?>"> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <small><?php the_time('F jS, Y'); ?></small> <div class="entry"> <?php the_content(); ?> </div> <p class="postmetadata">Posted in <?php the_category(', '); ?></p> </div> <?php endwhile; else: ?> <p>Sorry, no posts matched your criteria.</p> <?php endif; ?>
最後のエントリーにだけ、特別なcssを適用するために class="post last" にする使用例です。
これで下記のようなcssができます。
.post{ border-bottom:1px solid #666; } .last{ border-bottom:0; }
コードにtypoがあったので修正しました。
*1:Conditional Tags