Hatena::ブログ(Diary)

kanonjiの日記 RSSフィード

http://kanonji.info/blog/ 2013年2月頃に移転しました。

2010-02-10

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の初期化中に読み込まれるので、ここに書いておけば使えると思います。

Wordpressはスネークケースだけど、キャメルケースにした。

is_last() とか is_first() という名前にしようかとも思ったけど、将来的にWordpress本体の条件分岐タグ*1とぶつかる危険性もあるかもなので。

使用例

<?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

しげるしげる 2010/06/29 11:42 ループ内の奇数偶数判定で検索し辿りつきました。

記事内容に関連での質問なのですが、ループ内での順番号を取得したいと思ってます。

例えば、ループ内で5件表示させ、上から1、2、3・・と数字で取得したいと考えてます。

どうかお力をお貸しください。

お願いします。

kanonjikanonji 2010/07/01 09:46 コメントありがとうございます。

コメント欄にphpコードが書きにくかったので、記事として書いてあります。
下記を見てみてください。

WordPressの記事ループの中で、ループした回数を取得する
http://d.hatena.ne.jp/kanonji/20100701/1277944901

しげるさんの意図しているものになっていれば良いんですけど。

しげるしげる 2010/07/01 10:39 まさしく意図するものでした。

本当にありがとうございました。

感謝!!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証