新着記事を取得して表示する


ブログのトップページに新着記事一覧を表示していたが、以前は自分のブログをRSSで取得し表示するものだった。記事にiframe対応にしてからRSSがうまく取得できなくなったようなので、直接データを取得して表示する方法に変更しようと思う。

新着記事のデータを取得する

wordpressの記事を取得するのに「get_posts」関数を使います。使い方などは「wordpress日本語ドキュメント」を参考にしました。
今回は

  1. 表示件数は最大10件
  2. 投稿作成日で並べる
  3. 並び順は降順である
  4. 表示項目は「投稿作成日、投稿タイトル、投稿カテゴリ」である

にします。1~3はデータを取得する為の条件でパラメータとして指定します。各パラメータのパラメータ名と値は次のようになります。

パラメータ名 説明 パラメータ名=値
numberposts 10 表示件数は最大10件 numberposts=10
orderBy date 投稿作成日で並べる orderBy=date
order DESC 並び順は降順である order=DESC

各「パラメータ名=値」を「&」で結合した文字列を「get_posts」関数の引数として渡します。

$new_info = get_posts("numberposts=10&orderBy=date&order=DESC");

取得データをみてみると次のようになりました。

Array
(
    [0] => stdClass Object
        (
            [ID] => 1717
            [post_author] => 1
            [post_date] => 2010-02-12 02:33:38
            [post_date_gmt] => 2010-02-11 17:33:38
            [post_content] => 省略
            [post_title] => 変数の定義・代入・参照
            [post_category] => 0
            [post_excerpt] =>
            [post_status] => publish
            [comment_status] => open
            [ping_status] => open
            [post_password] =>
            [post_name] => 省略
            [to_ping] =>
            [pinged] =>
            [post_modified] => 2010-02-12 02:36:00
            [post_modified_gmt] => 2010-02-11 17:36:00
            [post_content_filtered] =>
            [post_parent] => 0
            [guid] => http://memories.zal.jp/WP/?p=1717
            [menu_order] => 0
            [post_type] => post
            [post_mime_type] =>
            [comment_count] => 0
        )

    [1] => stdClass Object
        (
            [ID] => 1716

      以下省略

各記事の情報はオブジェクトとして持っているようです。「get_posts」関数は、取得した記事数のオブジェクトを配列で返します。
このレスポンス値の中で今回表示に必要な項目をまとめます。

メンバ変数 説明
post_date 投稿作成日
post_title 投稿タイトル
guid 記事詳細ページへのリンク

カテゴリですが、「post_category」から取得できるのかと思ったらどの記事も「0」で違うようです。なので別の方法で各記事のカテゴリを取得します。

各記事のカテゴリを取得する

wordpressの記事を取得するのに「get_the_category」関数を使います。
この関数は記事IDを引数で渡すと、その記事のカテゴリ情報を配列で返します。

$category_obj = get_the_category(記事ID);

取得データをみてみると次のようになりました。

Array
(
    [0] => stdClass Object
        (
            [term_id] => 47
            [name] => Javaの基本
            [slug] => java_base
            [term_group] => 0
            [term_taxonomy_id] => 47
            [taxonomy] => category
            [description] =>
            [parent] => 45
            [count] => 4
            [object_id] => 1717
            [cat_ID] => 47
            [category_count] => 4
            [category_description] =>
            [cat_name] => Javaの基本
            [category_nicename] => java_base
            [category_parent] => 45
        )
)

各カテゴリの情報はオブジェクトとして持っているようです。各記事は複数のカテゴリを登録することができるので、カテゴリの登録数分のオブジェクトを配列で返しています。
今回表示に必要な項目をまとめます。

メンバ変数 説明
cat_name カテゴリ名

「name」と「cat_name」の違いがよくわからないのですが、また詳しく調べてみたいと思います。今回は「cat_name」を使いました。

新着記事一覧を表示する

記事データとカテゴリデータの取得の仕方がわかったので、実際に取得し表示していきます。

$new_info = get_posts("numberposts=10&orderBy=date&order=DESC");
if(empty($new_info)){
}else{
   echo '<div style="padding:0px;margin-top:10px;margin-bottom:18px">';
   echo '<div style="border-style:double;padding:5px;font-weight:bold;background-color:#FFFFcc">新着記事</div>';
   echo '<table style="padding:10px;" border="0" width="100%">';
   foreach($new_info as $object){
     //カテゴリ取得
     $category_obj = get_the_category($object->ID);
     $category = "";
     $i = 0;
     foreach($category_obj as $cat_obj){
       if($i > 0) $category  .= "/";
       $category  .= $cat_obj->cat_name;
       $i++;
     }
     echo "<tr>";
     echo "<td style='width:80px;font-size:11px'>".date('Y/m/d',strtotime($object->post_date))."</td>";
     echo "<td>";
     echo "<a href=\"{$object->guid}\">".$object->post_title."</a>";
     echo "</td>";
     echo "<td style='width:140px;font-size:12px'>{$category}</td>";
     echo "</tr>";
   }//END foreach
   echo "</table>";
   echo '</div>';
}//END if
setup_postdata($object);

1行目で新着記事の情報を取得しています。2行目でデータが取得できたか確認し、取得できれば4行目から表示処理に入ります。
取得したデータは配列に格納されていました。7行目から配列の要素分だけ繰り返しながら各記事の情報を表示していきます。

   foreach($new_info as $object){
       各記事を表示する処理
   }

記事の情報はオブジェクトとして格納されていました。繰り返しながら各オブジェクトは変数$objectに代入されているので、表示する値は次のようになります。

取得値 説明
$object->post_date 投稿作成日
$object->post_title 投稿タイトル
$object->guid 記事詳細ページへのリンク

9行目でカテゴリ情報を取得しています。カテゴリは複数登録できるので、11~16行目では各カテゴリ名をスラッシュ区切りにした文字列を作成しています。

取得値 説明
$cat_obj->cat_name カテゴリ名

新着記事一覧に必要な情報を全て取得できたので、後はテンプレートにタグでデザインを作りながら表示して終わりです。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です