前回までに、RSSやAtomを自動収集しDB(ドラゴンボールではない)に格納する仕組みを作り、それを表示させるスペースを確保することに成功した。今回は、前回作った固定ページに、DBから引っ張り出してきた情報を整形してリンクの形にして表示するPHPを書く。
総合、「総合」「2chまとめ」「ニュース」「ごはんレシピ」「技術」「ガジェット」「お問い合わせ」の7つのカテゴリーそれぞれに固定ページを作ったので、7個のPHPを書くことになるのだが、「お問い合わせ」以外は大体同じ処理を繰り返して書くことになる。なので共通する部分は、関数化して呼び出すのがスマートだ。WordPressではWordPress世界のPHPから呼び出すユーザ定義の共通関数は、各テーマのディレクトリ直下にあるfundtions.phpに書く事になっている。ここに書くと、WordPress世界ではどこからでも呼び出す事が出来る。ここではテーマ”twentyten”を使用しているので以下のディレクトリのfunctions.phpを編集する。
ドキュメントルート/wp-content/themes/twentyten/functions.php
このfunctions.phpは、どこからでも呼び出せるので便利だが、それはどこにでも影響を与えると言う事を意味している。どういう事かと云うと、functions.phpに文法間違いがあると、WordPress全体がphpエラーとなって、アクセスできなくなってしまう。いわゆる画面が真っ白状態を呼ばれ親しまれている現象だ。本番環境へはちゃんとテストした物を上げないと、ページ全体がアクセス不可能と成りかねないのだ。とても怖い。
そんなこんなに注意しつつ、phpを記述していくのだが、page-*.phpの内容はこんな感じになる。
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts(
Array(
'paged' => $paged,
'cat' => 'カテゴリーNo.',
'post_type' => 'post',
'orderby' => 'date',
'order' => 'DESC',
'posts_per_page' => 50,
)
);
echo "<ul>";
if (have_posts()) : while (have_posts()) : the_post();
?>
<li><?php MK_linktext($post); ?> </li>
<?php endwhile; ?>
<?php endif; ?>
</ul>
<?php wp_reset_query(); ?>
とまあ、こうなる。シンプルだ。ちょこっと解説すると、query_postsというWordpressの関数で、条件に合致する投稿を根こそぎ持ってくる。今回はカテゴリー毎のページを作っているので、’cat’ = カテゴリーNo. でカテゴリーを絞り込んで取ってきている。それを一つづつループで処理していく。ul タグで囲んで個々のリンクを li タグの中に入れている。簡単に言うと、query_postsで取ってきた投稿があれば、$postと言うオブジェクトに入れて、MK_linktextと言う関数に渡している。このMK_linktextがfunctions.php にこれから書くべき自作関数である。そして最後にクエリをリセットして終わる。
では、MK_linktextには、どのような処理を入れればよいか。ざっとこんなところだ
- $postオブジェクトから必要な情報を引っ張り出す
- 引っ張り出した情報を、リンクの形に成形する
- 整形したリンクを返す
具体的にはこんな感じになった。
function MK_linktext($Mlongparts)
{
$c_cnt = $Mlongparts -> comment_count;
$c_id = $Mlongparts -> ID;
$p_content = $Mlongparts -> post_content;
$p_date = $Mlongparts -> post_date;
$word_arr = explode("-::-",$p_content);
$list = Array(
'link' => $word_arr[0],
'title' => $word_arr[1],
'sitelink' => $word_arr[2],
'sitetitle' => $word_arr[3],
'date' => $word_arr[4],
);
global $disp_html;
$disp_html = "<strong><a href=\"$c_counter$list[link]\" title=\"$list[title]" target=\"_blank\">$list[title]</a></strong><br>";
$disp_html .= "<span>".$p_date." <strong><a href=\"$list[sitelink]\" target=\"_blank\">$list[sitetitle]</a></strong></span><br>";
echo $disp_html;
}
これはホントにオブジェクトから値を取り出して変数へ格納しているだけだ。注意すべき点は、引数で渡されるのは変数では無くてオブジェクトであると言う点だ。連想配列のように扱おうとしてもそうはイカの金玉である。
これで、カテゴリNoを替えたpost-*.php を作ればカテゴリー別ページの出来上がりだ。トップページ、アーカイブ、検索結果などのテンプレートも同じ要領で作り込んでいけばいい。
後は、クリックカウンタなど、ちょっとやりたいことを追加していけば完成なのだが、そのあたりはまた次回に委しく述べようと思う。
*追記: 反響にお答えし、アンテナサイト用Wordpressテーマ「Antena Institute」をリリースいたしました。
詳しくは、「Antena Instituteについて」をご参照ください。
ご購入を希望される方は、下記リンクにてAntena Instituteをご購入ください。
Twibot Institute | 銀仁堂