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’が付く。
まぁ、後でアレになんやかんや言われることを想定した、自分の現実逃避用のコードです。
まぁ、どうせこんなん作っても、今度は他のことであーやこーや言われるんだろうけどね・・・。
