WordPressでquery_postsとget_post_metaとカスタム投稿を使って簡単なニュースを出す

こんばんは。

WordPressで、カスタム投稿タイプを2種類定義して、
それぞれを別の更新情報をお知らせする用として公開したい場合の話。

 

クリックすると各ニュースの詳細が記載されているページにジャンプします。


まずはfunctions.phpに下記の記述をし、カスタム投稿タイプを定義します。

register_post_type()がカスタム投稿タイプを出力するテンプレートタグです。
関数リファレンス/register post type – WordPress Codex 日本語版

add_actionを使い、関数create_post_typeを発動させます。
initというのはWordpress起動直後の、最初に登場するフックポイントです。つまりはこれを利用することによりスグ発動するということです。

ちなみにカスタム投稿タイプを複数定義する場合には、こちらを参考にしました!
WordPress › フォーラム » カスタム投稿タイプを複数作る方法

create_post_type関数を2度、定義することがNGなため、このような入れ子構造です。

これで管理画面のサイドメニューには投稿タイプ名で定義した’ニュース’と’セミナー情報’が出力されているはずです。

name =>‘で定義していたにあたる項目です。

screen3

で、ここにそれぞれいくつか投稿していくわけですが、そこは省略して…
ループの話にすすめます。


もう一度TOP画面を見てください。

 

青色のところが「ニュース」

赤色のところが「セミナー情報」

それぞれ若干、出力している内容が違います。

別々にパーツテンプレートを作成し、UPします。

「ニュース」…content-news.php

「セミナー情報」…content-seminor_news.php

パーツテンプレートの内容について、少しメモ、

これなんですが、get_post_metaでカスタムフィールドの値を取得し、リスト(

  • )の中に出力しています。
    例えば今回だと、ページの更新情報を出力するとき、最新情報なら「NEW」と、注目して欲しい情報なら「注目」と出力しています。

    カスタムフィールドについてはまたいつか。少し説明するとプラグイン「カスタうフィールドテンプレート」で作ったものを取得しています。

    で、get_post_meta()の第一引数$post -> IDで、投稿のIDを取得。
    第二引数にはカスタムフィールドの名前を入力します。(例がめっちゃ解りづらいですが)

    これをそれぞれ、任意の場所でループさせることで、上記の画像のような表示になります。

    そしてループはコチラ。

    さらにcontent-news.phpというファイルを読み込んでいます。
    その中に、ニュース1つ分のHTMLとテンプレートタグが記述してあります。
    HTMLの説明も省略。

    if(have_posts()): while(have_posts()): the_post(); ?>
    は、投稿をループさせる基礎的なテンプレートタグ。
    これに更に
    query_posts(‘post_type=news&posts_per_page=-1′); ?>
    を付け足します。

    query_postsはループの表示内容を上書きするテンプレートタグ。
    post_typeで、ループさせたい投稿のタイプ(個別記事だと post や 固定ページだと page)を指定。
    posts_per_page=で表示数を指定します。今回、条件を2つ指定しているので、シングルクォーテーションでひと纏りにして、「&」で結合してます。

    で、-1と指定していますが、0以下を指定することで、該当する記事がすべて表示されるようになります。

    この時の注意が、query_postsで指定した表示数が管理画面の「設定」>「表示設定」内の、1ページに表示する最大投稿数よりも多くならないようにします。

    その中のget_template_part()で、ループさせる単体のパーツテンプレートを読み込ませます。ここが投稿数分、出力されます。

    このページがすごく解りやすいです。
    query_postsでループの条件を指定しよう! >> ホームページ制作│秋田(SOHO)│webstudio AWD

    あとはスタイルシートでちょっとカスタマイズして終了!

    ひとつハマりかけたのが、日付を出力しているところ。

    the_time(‘Y年m月d日’); ?>

    で出力していますが、もともと

    the_date(‘Y年m月d日’); ?>

    でやっていました…こちらだと、1度しか出力しないため
    ループしても、先頭のオブジェクト以外には日付が付加されないんですね!びっくり!

    というわけで、今担当している案件で行った作業を触り程度に解説しました…
    やはり実践は書籍と違いますね~。情報が断片化していて、たいへん

    ちなみに今はこちらの本で勉強しています。

    51mTwocfbnL._AA300_

    極厚。

    内容もしっかりしていて巻末でちゃんとテンプレートタグや関数名でページが探せるように書いてあります。

    では。

Share

  • Add this entry to Hatena Bookmark

Follow Me