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’が付く。

 

まぁ、後でアレになんやかんや言われることを想定した、自分の現実逃避用のコードです。

まぁ、どうせこんなん作っても、今度は他のことであーやこーや言われるんだろうけどね・・・。

 

 

カテゴリ

この記事のコメント

コメントはないです。

コメントを残す

メールアドレスが公開されることはありません。