このサイトのWordPressテーマ、お手製なんですが(リンク)、ナビゲーション的にちょっと問題があるなと思ってました。
そうだ、目次を作ってみよう。
という訳で、いまんとここんな感じ。
作成中じーっとソース見てると同じ処理がいっぱいあるなと思い、なんとか使い回し出来ないかと思った訳です。
クラス化。よーく考えるとWordPressはPHPだから、もしかしたらPHPのクラスを作って使い回し出来るんじゃないかと思いテスト。出来た。
作ったクラスはこんな感じ。
<?php class postThumb{ private $ID; //コンストラクタ public function postThumb($cat_id){ $this->ID = $cat_id; } //表示 public function show(){ echo "<div class='mokuji'>"; //ラップ $postVal = 'numberposts=10&category=' . $this->ID; $posts = get_posts($postVal); global $post; $count = 0; foreach($posts as $post): setup_postdata($post); echo "<ul>"; echo "<li class='story'>"; echo "<a href='"; the_permalink(); echo "'>"; if (has_post_thumbnail()){ if($count < 3){ the_post_thumbnail('thumb100'); echo "<p><span class='mTitle'>"; the_title(); echo "</span></a>"; the_excerpt(); echo "<br>"; }else{ echo "<p>"; the_title(); echo "</a>"; } }else{ echo "<p>"; the_title(); echo "</a>"; } echo "</p><div class='clear'></div>"; echo "</li>"; echo "</ul>"; $count++; endforeach; wp_reset_postdata(); echo "</div>"; } } ?> //表示するとき。postThumbにカテゴリーIDを投げて生成表示。 <?php $Stories = new postThumb(10); $Stories->show(); ?>
何をやっているのかと言うと、カテゴリーの最近の記事の10個を持って来て、サムネイルを持っている場合と無い場合にまず分け、さらに先頭の3つ目まではサムネイルと抜粋を表示、以降はテキストだけ表示。ということをやってます。
最適化はあとからやる主義なので無駄はまだまだまだまだッ…あります。引数はコンストラクタじゃ無くて、showに投げた方がメモリ的にも優しいよねとか。obj-cで鍛えられてるなぁオレ(笑
WordPressはthe_excerpt();というコマンドで抜粋表示が出来るんですが。これが出なかったり表示ずれたりして。
調べてもなかなか分からなかったんですが、どうもforeachの辺りが怪しい。これで合っているのか延々調べたあげく発見。
これが必要。
setup_postdata($post);
wp_reset_postdata();
これが無いと表示おかしくなります。これ書いて無いんだよね…どこも意外と。
とりあえずここまで出来たと言う感じ。まだ改良出来るところは沢山あるし、やりたいので暇を見て改造して行きたいと思います。
コメントを残す