We are ACORN!

プログラムやサーバーの設定など、技術的な記事を載せております。

WordPress プログラミング

WordPressのメインループ&サブループ

投稿日:

WordPressのテンプレートを作っていると、ループの構造で混乱してくる人がいます。
ですので、不要なHTMLを除いた、単純な構造を書いておこうと思います。
解説はコメントに書いています。

<?php

// ヘッダーやサイドバーを表示する(今回は割愛)
// get_header();
// get_sidebar();

// -----------------------------------------------------------------------------
// メインループ
// (たとえ記事が一つだけ出るテンプレートでもループを作ることを推奨している)
// -----------------------------------------------------------------------------
if ( have_posts() ) :
  while ( have_posts() ) :
    the_post();     // ループを次に進める。
                    // そして、グローバル変数の$postに投稿をセットする。
                    // 今後のループ内で使うテンプレート関数は、この$postを利用する。

    the_title();    // $postから投稿のタイトルを表示する。
    the_content();  // $postから投稿の本文を表示する。
  endwhile;
else :
  // 通常index.phpか404テンプレートが設定されていれば、ここには来ないはず。
  echo "投稿が見つかりません。";
endif;

// -----------------------------------------------------------------------------
// サブループ
// -----------------------------------------------------------------------------

// 条件を配列に格納
$args = array(
  'category_name'  => 'news',
  'posts_per_page' => 3
);
// 上記の配列に基づいて、WP_Queryオブジェクトを作成
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) :
  while ( $the_query->have_posts() ) :
    $the_query->the_post(); // サブループを次に進める。
                            // そして、グローバル変数の$postに投稿をセットする。

    the_time('Y.m.j'); // $postから投稿の公開日時をフォーマットして表示する。
    the_permalink();   // $postから投稿のパーマリンクのURLを表示する。
    the_title();       // $postから投稿のタイトルを表示する。
  endwhile;

  wp_reset_postdata();  // サブループを終了し、グローバル変数の$postを
                        // メインループ用に戻す。
endif;

// フッターを表示する(今回は割愛)
// get_footer();

WordPressの「the」が付くテンプレート関数は、$postを元にして、内容を表示したり、取得したりします。

-WordPress, プログラミング


comment

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

MarkDownDiagram

マークダウンで画面遷移図などのダイアグラムを作れるツールをブラウザベースで作ってくださった方がおられます。 大変重宝していて、業務で使いまくりです。 https://github.com/wakufa …

さくらのレンタルサーバーのメールをslackに通知する

今までメールを自分で作ったスクリプトで携帯に転送していたんですが、キャリアメールをやめたのでslackにメッセージを投げることにしました。 前提として、プランがスタンダードである必要があります。 何せ …

【PHP】 全角記号のときmb_strwidthが1を返す

PHPで全角の判断に、mb_strwidthを使っていました。 mb_strwidth == (mb_strlen*2) だったら全角文字、みたいな。 そうしたら、「◎」を入れたらうまくいかないとクラ …

【PHP】DBライブラリ 「idiorm」

フレームワークを使うには簡単すぎる、かといってPDOを使ってガリガリ書くのは面倒。 そんな時に役立つライブラリが「idiorm」です。(なんて読むんでしょうか?) GitHubで公開しています。 ht …

【WSL】PHPから送信するメールをテキストに保存する

テスト環境で使っていると、PHPのメール送信をテストしたい時があります。 かといって、実際に送信されてしまうと面倒です。 xamppにはmailtodiskというのがあり、メールをディスクに保存してく …