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を元にして、内容を表示したり、取得したりします。