【WordPress】よく使う記事の取得コード
WordPressでよく使う、ブログ記事の取得のコードを紹介するにゃん!投稿と、カスタム投稿の記事も取得できるにゃん。
出来上がりのイメージ
アイキャッチ画像とタイトルを表示し、各ブログ記事へリンクします。
SP表示では、1列に1記事が表示されるよう、CSSを組んでいます。
記事の取得コード(通常の投稿)
基本の取得コードを紹介します。
1<?php $posts = get_posts('cat=3&posts_per_page=-1'); ?>
2<?php foreach ($posts as $post):setup_postdata($post); ?>
3
4<a class="eyecatch__link" href="<?php the_permalink(); ?>">
5 <?php the_post_thumbnail( 'large' ); ?>
6 <h2><?php the_title(); ?></h2>
7</a>
8
9<?php endforeach; ?>
10<?php wp_reset_postdata(); ?>
コードの説明
1行目、投稿記事の取得
get_posts
の引数にcat=3&posts_per_page=-1
を設定しています。この指定により、カテゴリーIDが3の投稿記事を全件取得し、$posts
変数に保存しています。
※ posts_per_page に-1を設定すると全件取得になり、指定した記事件数を取得したい場合は、具体的な数を指定します。
2行目・9行目、繰り返し処理
1行目で$posts
にカテゴリ3の記事を全件取得して、入れています。
次に2行目のforeach($posts as $post):
をすることで$posts
(取得した全件の投稿記事)の内1件の記事を $post へ渡しています。
そしてsetup_postdata($post)
をすることで「今からこの記事を使って、処理を開始するよ」とWordPressに伝えて、実際に3行目以降で表示していきます。
9行目の<?php endforeach; ?>
は、2行目から開始したforeach(ループ処理)の終わりを示しています。
9行目のendforeach まで処理が進むと、再び2行目の<?php foreach($posts as $post): setup_postdata($post); ?> の処理に戻り、2件目の投稿記事を $post に渡します。
これが全件取得の場合は、全件分終わるまで繰り返されます。
10行目、global変数の$postを元に戻す
(重要)最後に10行目に、 $post の内容をクリアーにしています。この記載がないと、この後の処理で不具合を起こす可能性があります。
2行目で使用している $post 変数はグローバル変数といい、Wordpress全体で利用している変数になります。そのため、変数を上書きして利用してしまっている状態のため、処理後はresetして元の状態に戻す必要があります。
今回、$postsを利用しているのですが、こちらもグローバル変数のため、もしどこか不具合が起きるようでれば、$posts部分を任意の$change_postsなどに変更してみてくださいね。
($post の場合は他の変数名にしてしまうとうまく表示されなくなりますので注意)
4〜7行目、投稿記事の情報を取得
2行名でsetup_postdata($post);された投稿データを、4行目〜7行目で、取得した記事の情報を表示しています。
- the_permalink() … 投稿のリンク
- the_title() … 投稿のタイトル
- the_post_thumbnail( ‘large’ ); … サムネイル(大きさlarge)
記事の取得コード(カスタム投稿タイプ)
1<?php $posts = get_posts('post_type=course-column&&posts_per_page=-1'); ?>
2<?php foreach ($posts as $post):setup_postdata($post); ?>
3
4<a class="eyecatch__link" href="<?php the_permalink(); ?>">
5 <?php the_post_thumbnail( 'large' ); ?>
6 <h2><?php the_title(); ?></h2>
7</a>
8
9<?php endforeach; ?>
10<?php wp_reset_postdata(); ?>
基本的には、先ほど紹介した「通常の投稿」と同じです。1箇所違うのは、1行目のカテゴリーの数を指定していた箇所を「カスタム投稿タイプのスラッグ」指定にしています。
今回であれば「course-column」を指定しています。