PHPでカテゴリのURLまたはスラッグに応じた条件分岐の書き方

WordPressを使用してWebサイトを開発する際、
カテゴリやURLに基づいて異なるコンテンツを表示したい場合があります。
今回は、特定のURLやカテゴリスラッグに基づいて条件分岐を行い、
最新の投稿を取得して表示する方法を紹介します。
この技術は、特定のカテゴリに属する最新の投稿をページ上に動的に表示したいときに非常に役立ちます。

条件分岐の基本構造

以下のコードでは、strpos()関数を使用して、URLに特定の文字列が含まれているかどうかを判定し、
それに応じてカテゴリスラッグを設定する方法を説明します。

<?php
// カテゴリのURLまたはスラッグに応じて分岐処理
if (strpos($url, 'voice') !== false) {
$category_slug = 'voice';
} elseif (strpos($url, 'event') !== false) {
$category_slug = 'event';
} elseif (strpos($url, 'knowledge') !== false) {
$category_slug = 'knowledge';
}

if (isset($category_slug)) {
$latest_posts = get_latest_posts_by_category($category_slug);
foreach ($latest_posts as $post) : setup_postdata($post); ?>
<li><a href="<?php the_permalink(); ?>"><span class="entry-date"><?php the_time('m月d日'); ?></span>&nbsp;<?php echo wp_trim_words(get_the_title(), 10, '...'); ?></a></li>
<?php endforeach; wp_reset_postdata();
}
?>

strpos()関数を使用したURLの判定

strpos()は、文字列の中に特定の部分文字列が存在するかどうかを確認する関数です。
この関数は、文字列が見つかった場合、その位置を返します。
文字列が存在しない場合はfalseを返します。

if (strpos($url, 'voice') !== false) {
// 'voice'がURLに含まれている場合
$category_slug = 'voice';
}

このように、strpos()を使うことで、
URLに含まれているキーワードに基づいて適切なカテゴリスラッグを割り当てることができます。
例えば、URLに「voice」が含まれている場合、そのカテゴリスラッグは「voice」になります。

elseifを使用した追加の条件

複数のカテゴリスラッグを判定したい場合は、elseifを使って条件を追加していきます。
この例では、「voice」、「event」、「knowledge」という3つの異なるカテゴリを判定しています。

if (strpos($url, 'voice') !== false) {
$category_slug = 'voice';
} elseif (strpos($url, 'event') !== false) {
$category_slug = 'event';
} elseif (strpos($url, 'knowledge') !== false) {
$category_slug = 'knowledge';
}

isset()で変数が設定されているかを確認

最後に、$category_slugが正しく設定されているかを確認するために、
isset()関数を使用します。isset()は変数が存在し、値がnullではない場合にtrueを返します。

if (isset($category_slug)) {
// 設定されたカテゴリスラッグに基づいて最新の記事を取得
$latest_posts = get_latest_posts_by_category($category_slug);
foreach ($latest_posts as $post) : setup_postdata($post); ?>
<li><a href="<?php the_permalink(); ?>"><span class="entry-date"><?php the_time('m月d日'); ?></span>&nbsp;<?php echo wp_trim_words(get_the_title(), 10, '...'); ?></a></li>
<?php endforeach; wp_reset_postdata();
}

この部分では、条件分岐によって割り当てられた$category_slugに基づいて、get_latest_posts_by_category()関数を使って最新の記事を取得し、リスト形式で表示しています。
記事のリンク、投稿日、タイトルを表示し、
タイトルが長い場合にはwp_trim_words()を使って10単語に切り詰めています。

実際の表示例

この条件分岐を使うことで、例えば次のように動作します。

URLが「/voice/」を含む場合、$category_slugは「voice」となり、
「voice」カテゴリの最新記事が表示されます。

URLが「/event/」を含む場合、$category_slugは「event」となり、
「event」カテゴリの最新記事が表示されます。

URLが「/knowledge/」を含む場合、$category_slugは「knowledge」となり、
「knowledge」カテゴリの最新記事が表示されます。

まとめ

この方法を使うことで、カテゴリやURLに応じて動的に記事を表示できるようになります。
WordPressを利用する際に、カテゴリごとに異なるコンテンツを表示したい場合、
今回紹介したようなstrpos()isset()を利用した条件分岐は非常に便利です。

この条件分岐の応用で、より複雑なサイト構造やカスタマイズを行うことも可能です。