いつも思うこと。
WordPressを使うサイト作成でも、記事以外はWP外部で作った方が楽。
本当はテンプレート作った方がいいんだろうけど、なんでかいつも面倒に思える。
なので、ほぼ毎回HOMEの新着情報はWPから情報抽出してHOMEのPHPファイルに埋め込ませてる。
ただ、いつもはカテゴリ関係なしに新着を表示させていたので問題なかったが、今回は記事毎にカテゴリのアイコンを表示するというものになった。
目標はこんな感じ
ソース的には
<li class="news">
<span class="NL_date">2011.09.30</span>
<a href="news.php" target="_blank">ニュースでのテスト</a>
</li><!-- End event or news -->
<li class="event">
<span class="NL_date">2011.09.29</span>
<a href="news.php" target="_blank">Hello world!</a>
</li><!-- End event or news -->
こうなると、get_posts()で記事情報を取得し、foreachでループしてリスト化するだけじゃ対応できない。
なぜなら、このget_posts()ではカテゴリ情報は取得できない。
get_posts()にカテゴリの条件入れると、表示順カテゴリが優先されてします。
ちょっとググって見たら記事の該当するカテゴリ情報を取得する“the_categoru()”があることが判明!
なので、ループの中に該当のカテゴリ情報を取得するためのthe_category()を設置してみる。
<?phprequire('./wp-load.php');?>
<?php
$mypost = get_posts();
foreach($mypost as $post) :
$mb_title = mb_convert_encoding($post->post_title, "UTF8", "UTF8");
$mb_content = mb_convert_encoding($post->post_content, "UTF8", "UTF8");
$sp_date = split(" ", $post->post_date);
$sp_set_date = split("-", $sp_date[0]);?>
<li class="<?php the_category(); ?>">
<span class="NL_date">
<?php echo $sp_set_date[0].".".$sp_set_date[1].".".$sp_set_date[2];
?>
</span>
<a href="news.php" target="_blank"><?php echo $mb_title; ?></a>
</li><!-- End event or news -->
<?
endforeach;
?>
すると、“post-categories”クラスタグの付いたリストタグとリンク情報までくっついてくる。
こんな余計な物は今回いらないし、実際欲しいのはカテゴリーのスラッグ情報だけでいい。
ググってみたら、該当カテゴリ情報を取得するget_the_category()なるものがあることが判明。
使い方はget_posts()と同じで、配列に押し込んで必要情報を代入して取り出すようだ。
get_the_category()からカテゴリのスラッグを取得。
<?php $cat = get_the_category(); $cat = $cat[0]; { echo $cat->slug; } ?>
これをリストのクラスにはめ込めば完成。
<?php
require('./article/wp-load.php');
?>
<?php
$mypost = get_posts();
foreach($mypost as $post) :
$mb_title = mb_convert_encoding($post->post_title, "UTF8", "UTF8");
$mb_content = mb_convert_encoding($post->post_content, "UTF8", "UTF8");
$sp_date = split(" ", $post->post_date);
$sp_set_date = split("-", $sp_date[0]);
?>
<li class="<?php $cat = get_the_category(); $cat = $cat[0]; { echo $cat->slug; } ?>">
<span class="NL_date">
<?php echo $sp_set_date[0].".".$sp_set_date[1].".".$sp_set_date[2]; ?>
</span>
<a href="news.php" target="_blank"><?php echo $mb_title; ?></a>
</li><!-- End event or news -->
<?
endforeach;
?>
このphpファイルをindex.phpの反映させたいところに読み込ませる命令を記述。
<?php include_once("top_newslist.php"); ?>
いつも思うけど、できあがると簡単に思えちゃうのは何故だろう。
WordPressのloopファイル見てもまったくわからないくせに…。