固定ページに指定カテゴリの記事を表示したい!

ヘッダ画像

固定ページに指定カテゴリの記事を表示したい!

WordPressのカスタマイズではページ内にカテゴリで絞り込んだ一覧を表示したいという要望が多いです。

「固定ページ内に特定カテゴリの投稿記事だけを載せたい」
「固定ページに目次ページを作成したい」
「トップページをひとつのカテゴリだけの記事表示にしたい」
「投稿記事の最後にカテゴリの一覧を表示する」

今回はコピペで実装できる特定カテゴリ記事表示の方法を紹介します。
リストでの一覧取得や最新記事だけ取得表示したり、幅広い用途に使えると思います。

指定カテゴリIDの記事を取得表示する

<?php
$wp_query = new WP_Query();
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'category__in' => 2,
'posts_per_page' => 4,
'order' => 'DESC'
);
$wp_query->query($args);
if($wp_query->have_posts()){
?>
<?php
while (have_posts()) {
the_post();
?>
<!– 出力部分 –>
<p><a href="<?php echo get_permalink(); ?>">
<?php the_title(); ?></a><br>
<?php the_excerpt(); ?></p>
<!– 出力部分 –>
<?php
}
wp_reset_query();
}
?>

シンプルな記述ですので、この記事を見られている中級者までの方でもなんとなく理解できるのではないでしょうか。
固定ページに表示させたいのであれば、お使いのテーマのpage.phpの下部あたりにコピペするだけで動作するはずです。
WP_Queryを使ったサブループですので、基本的には投稿のsingle.phpやcategory.phpなどアーカイブ系のテンプレート、そしてサイドバーなどで使っても問題ありません。

プロパティの説明

取得条件は$argsのプロパティと呼ばれる値で指定しています。
上記では目的に沿った最低限のプロパティしか与えていませんので、簡潔に説明します。

‘post_type’ => ‘post’
対象とする投稿タイプでpostは通常の投稿を指します。
投稿はデフォルトでもあるため、今回のサンプルコードでは省略も可能です。

‘category__in’ => 2
表示したい指定のカテゴリIDです。
任意のカテゴリを指定します。

‘posts_per_page’ => 4
表示件数です。
-1で全件取得します。
未指定の場合はダッシュボードの表示設定「1ページに表示する最大投稿数」が表示件数となります。

‘order’ => ‘DESC’
こちらはソート順です。
‘DESC’ – 最高から最低へ降順 (3, 2, 1; c, b, a)
‘ASC’ – 最低から最高へ昇順 (1, 2, 3; a, b, c)

ソート条件にはorderbyというパラメータを用い、デフォルトは’post_date’の日付順で上記では省略しています。
サンプルコードは投稿日付の新しい順に表示されます。

その他のソート条件パラメータは下記です。
'orderby' => 'post_date' 日付順(デフォルト)
'orderby' => 'ID' 投稿ID
'orderby' => 'post_author' 著者
'orderby' => 'post_title' タイトル
'orderby' => 'post_name' スラッグ
'orderby' => 'post_type' 投稿タイプ
'orderby' => 'post_modified' 更新日
'orderby' => 'none' 順序をつけない(バージョン2.8以降)

出力内容の変更

Pタグの部分が実際のHTMLへ出力されます。
抜粋が不要でタイトルのみ表示したいということであれば、the_excerpt()を削除します。
下記のようにリストタグの使用も可能ですので、ご希望の形に成形ください。

1.リンク付きのタイトルだけを並べるリストタグ
<ul>
<li><a href="<?php echo get_permalink(); ?>">
<?php the_title(); ?></a></li>
</ul>

2.抜粋付きの定義リストタグ
<dl>
<dt><a href="<?php echo get_permalink(); ?>"><?php the_title(); ?></a></dt>
<dd><?php the_excerpt(); ?></dd>
</dl>

現在の表示カテゴリに属する記事を取得する

バリエーションとして、カテゴリを指定せずとも、現在の表示記事と同じカテゴリに属する記事を自動取得して表示させてみます。
こちらはいずれかのカテゴリに属していることが条件のため、single.phpで使うことになります。

<?php
if(($cats = get_the_category( $post->ID ))){
$catID = array();
foreach ( $cats as $cat ){
$catID[] = $cat->cat_ID;
}
$wp_query = new WP_Query();
$args = array(
'post_type' => 'post',
'post__not_in' => array( $post->ID ),
'post_status' => 'publish',
'category__in' => $catID,
'posts_per_page' => 4,
'order' => 'DESC'
);
$wp_query->query($args);
if($wp_query->have_posts()){
?>
<!– 出力部分 –>
<p><a href="<?php echo get_permalink(); ?>">
<?php the_title(); ?></a><br>
<?php the_excerpt(); ?></p>
<!– 出力部分 –>
<?php
}
wp_reset_query();
}
?>

冒頭のget_the_categoryで現在のカテゴリーIDを取得して、それをプロパティのcategory__inで$catIDに値として与えるという仕組みです。
また、「’post__not_in’ => array( $post->ID )」で現在の表示ページを除外しています。
それ以外の基本的な内容は同じです。

これをベースに同じカテゴリの記事を「関連記事として自動表示」させることもできますので、なかなか使えるパターンかと思います。

コメントを残す

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



関連記事

WordPressのログインユーザー名は丸見え!? 知っていますか?WordPressのログインユーザー名はだだ漏れだという事実を...ダッシュボード乗っ取り防止のためのセ...

絶対に分かる!WordPressの子テーマ作成 WordPressでは子テーマという機能があります。既存のテーマを作成すれば、カスタマイズする際に変更したい部分だけを子...

WordPressのRSSフィードを完全にコントロールする WordPressではコンテンツの更新情報を知らせるために標準でRSSを出力します。その出力方法は...http://e...

「トップに戻る」ボタンでスマホでのユーザビリティアップ! ウェブサイト上でコンテンツを下にスクロールさせると「トップに戻る」ボタンが出現して、クリックするとビューンとページの初め...