WordPressのWP_Queryのループ内で特定の記事のみ出力を変えるためのソースコードを紹介!

はじめに

WordPressのWP_Queryのループ内で「特定の記事のみ出力を変えたいな。」と思ったことはありますか?

今回実務案件で、「特定の記事のみ出力を変える実装」をしたのでご紹介します。

特定の記事のみ出力を変える実装の実際の例

当サイトのトップページや各カテゴリーページのような記事一覧ページで、各記事に「続きを読む」という出力があります。

その「続きを読む」という出力を特定の記事だけ「動画を見る」に変更するというのを今回WP_Query内で実装をしました。イメージ掴めましたでしょうか?

では下記で具体的なソースコードの紹介をします。

WP_Queryのループ内で特定の記事のみ出力を変えるためのソースコード

PR

<?php if(have_posts()): ?>
	<div class="article__list">
		<?php while(have_posts()): the_post(); ?>
			<div class="article__item">
				<div class="article__img">
					<a href="<?php the_permalink(); ?>">
						<?php if(has_post_thumbnail()): ?>
							<img src="<?php echo get_the_post_thumbnail_url(get_the_ID(),'medium'); ?>">
						<?php endif; ?>
					</a>
				</div>
				<div class="article__content">
					<h3>
						<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
					</h3>
					<div class="btn">
						<?php
							$post_slug = get_post_field('post_name', get_the_ID());
							if($post_slug == 'movie'):
								echo '動画を見る';
							else :
								echo '続きを読む';
							endif;
							?>
					</div>
				</div>
			</div>
		<?php endwhile; ?>
	</div>
<?php endif; ?>

WP_Queryのループ内で特定の記事のみ出力を変えるためのソースコード説明

特定の記事のスラッグをここでは「movie」にしています。

上記ソースコードを使用すると記事一覧の中でスラッグが「movie」になっている記事のみ「続きを読む」という出力が「動画を見る」という出力に変わります。

ポイントは下記部分のソースコードですね。

<div class="btn">
    <?php
        $post_slug = get_post_field('post_name', get_the_ID());
        if($post_slug == 'movie'):
            echo '動画を見る';
        else :
            echo '続きを読む';
        endif;
        ?>
</div>

get_post_field()でスラッグ名を取得する

get_post_field('post_name', get_the_ID());を使用すると投稿のスラッグ名を取得することができます。それを$post_slugに代入します。

あとはif文を使用して条件分岐をすればWP_Queryのループ内で特定の記事のみ出力を変えることができます。

get_post_field('post_name', get_the_ID());で投稿のスラッグ名が取得できる!

WP_Queryのループ内で特定の記事のみ出力を変える(別の方法)

投稿スラッグではなく、記事IDで条件分岐をする

下記のソースコードのように記事IDで条件分岐をする方法もあります。

例 特定の記事の記事IDが「1000」の場合

<div class="btn">
    <?php
        $post_id = get_the_ID();
        if($post_id == 1000):
            echo '動画を見る';
        else :
            echo '続きを読む';
        endif;
        ?>
</div>

上記のソースコードでも特定の記事のみ出力を変えることが可能です。

しかし、このやり方には1点面倒な点があります。

記事IDは環境によって変わる!

ローカル環境でコーディングをして本番環境に反映をさせるやり方をするのが基本だと思います。

ローカル環境では記事IDが「1000」で、本番環境でも記事IDが「1000」だとは限りません。「1000」以外になるのがほとんどだと思います。

なので本番環境に反映させる時に「本番環境の記事IDを調べてソースコードを変更する」という作業が発生してしまいます。

一方、スラッグ名は誰かが変更しない限りは本番環境でも変わらないので、get_post_fieldでスラッグ名を取得するやり方の方が良いと言えます。

WordPressの特定の投稿記事に対して条件分岐をしたいときは「記事ID」ではなく「投稿スラッグ名」を使用して条件分岐をしよう!

まとめ

今回は、WordPressのWP_Queryのループ内で特定の記事のみ出力を変えるためのソースコードを紹介しました。見てくださった方の参考になったのであれば幸いです。

>お問い合わせはこちら

お問い合わせはこちら