WordPressで最初の記事、最後の記事を判定する
最初の記事と最後の記事を判定するテンプレート関数(MTでいうmtEntryHeaderやmtEntryFooterの機能)はWordpressにはない。
非効率と思いながら変数カウンタを使って、毎回その場限りの対応で判定していたのもあり、余りその必要性を感じてはいなかった。
自分でコーディングする分には特に問題ないし・・・あとから見てもここはこうしてたな、と思い出せるわけで。
だが、最近他の人が自分が作成したテーマを触る可能性が出てきた。
そいつはかなり面倒くさいやつである。
MovableTypeの知識で凝り固まっており、
「同じような形態でWordpressを触れるはずだ」
「友人がWordpressでWeb制作やブログをしていて、その子が簡単だといっているから簡単なはずだ」
とか、毎回のように言っている。
(まぁ、確かにありもののテンプレート関数でもそこそこのサイトが作れるWordpressはよくできてるもんだし、簡単だというのは同意できるが・・・。)
あとあと、MovableTypeではできたのに、Wordpressであれできないのかこれできないのかと聞かれるのも面倒くさい。
そんなこんなで、まずはMT他ブログ用CMSの代表的な機能であるコレの作成に至ったわけである。
最初からいくつ、最後からいくつってのもついでに機能に盛り込んだ。
isPostEdge
/*****************************************************************/ /* func名:isPostEdge() */ /* 目的:記事ループから始端終端を判定する */ /* (MovableTypeのEntryHeader, EntryFooterとほぼ同機能) */ /* 引数:第1引数...'s'=始端(Header) か 'e'=終端(Footer) */ /* 第2引数...第1引数での場所から何個までを範囲とするか */ /* 返値:チェック後のBoolean値(目的を満たした場合'true') */ /*****************************************************************/ function isPostEdge($flg = 's', $rng = 1){ global $wp_query; $ret = false; $tmp = ''; $var = 0; $num = 0; if($flg == 's' || $flg == 'e'){ $tmp = $flg; }else{ $tmp = 's'; } $var = intval($wp_query->current_post) + 1; if($tmp == 's'){ $num = $rng; if($var <= $num){ $ret = true; } }else{ $num = intval($wp_query->post_count) - $rng; if($var > $num){ $ret = true; } } return $ret; }
この関数はループ内で使用する。
第1引数に、s(EntryHeader様の動作)かe(EntryFooter様の動作)を指定。
第2引数に、第1引数から何個目までを条件として判定するか、範囲を指定する。(省略可)
↓こんな感じで設定
<?php if(have_posts()): while(have_posts()): the_post(); ?> <article class="test <?php if(isPostEdge('s', 2)){ echo 'saishoKara2koNiTsuku' } ?>"> <h1><?php echo get_the_title(); ?></h1> <div><?php echo get_the_content(); ?></div> </article> <?php end while; endif; ?>
上記の例なら最初から2個の記事だけに’saishoKara2koNiTsuku’が付く。
まぁ、後でアレになんやかんや言われることを想定した、自分の現実逃避用のコードです。
まぁ、どうせこんなん作っても、今度は他のことであーやこーや言われるんだろうけどね・・・。