CommentOut

【WordPress】スラッグ名からカテゴリーIDを取得する 【WordPress】スラッグ名からカテゴリーIDを取得する

【WordPress】スラッグ名からカテゴリーIDを取得する

公開日:  最終更新日:

初めにカテゴリーのスラッグ名からカテゴリーIDを取得する方法をご紹介します。

<?php
// カテゴリーIDの取得
$CategoryID = get_category_by_slug([スラッグ名])->term_id;
?>

具体的には[スラッグ名]の所に、スラッグ名を入れます。

<?php
// 例:スラッグ名が"news"の場合
$CategoryID = get_category_by_slug("news")->term_id;
?>

使う場面としては以下のようなシーンでしょうか

<?php
// カテゴリースラッグ「news」に一致する記事一覧を取得する
$result = new WP_Query(array(
    'post_status' => 'publish',
    'post_type' => 'post',
    'cat' => get_category_by_slug('news')->term_id, // カテゴリー条件で絞り込み
    'posts_per_page' => 10,
    'orderby' => 'date',
    'order' => 'DESC'
));

// サブループ
if ($result->have_posts()): while ($result->have_posts()): $result->the_post();
    // 記事表示部分
endwhile; endif;
// サブループをリセット
wp_reset_postdata();
?>

もしくは記事ループ・サブループ内で、特定のカテゴリーの時のみ、何かを表示したい時


<?php
// 記事ループ
if (have_posts()): while (have_posts()): the_post();
    // 現在参照中の記事がスラッグ「news」か判別する
    if (get_category_by_slug("news")->term_id == get_the_ID()) {
        // 現在の記事がスラッグ名「news」と一致する
    }
endwhile; endif;
?>

get_category_by_slug()の詳細説明

さて、ここからコードだけじゃなくて、詳しく知りたい人向けです。

上記コードをもう少し分解してみます。

<?php
// カテゴリーデータを取得
$Category = get_category_by_slug("news");

// カテゴリーデータ内のカテゴリ-IDを取得
$CategoryID = $Category->term_id;

// カテゴリーIDを表示
echo $categoryID;
?>

get_category_by_slugは、カテゴリーIDを取得する関数ではなく、カテゴリースラッグに一致するカテゴリーデータを取得するための関数です。

カテゴリーデータは以下のようになっています。

stdClass Object(
    term_id,
    name,
    slug,
    term_group,
    term_taxonomy_id
    taxonomy,
    description,
    parent,
    count,
    cat_ID,
    category_count,
    category_description,
    cat_name,
    category_nicename,
    category_parent    
)

この中のterm_idとcat_IDがカテゴリーIDになるので、この値を取得して使っているということになります。

カテゴリーIDをべた書きすることの何がいけないのか?

WordPressのテーマやプラグインを開発していて、カテゴリーIDを取得したい時がありますが、URLからカテゴリーIDを調べて使っていませんか?

確かにそれでも動きます。
しかし、エレガントではありません。

さて、以下のコードを見てください。

<?php if ($category == 5) {
    // 何かしらの処理
} ?>

上記のようなコードをチームの誰かが書いていたとしましょう。

『5』ってなんですか!?
プログラム内に謎の数字が表れることを『マジックナンバー』と言います。

記述した人には何の数字かわかっても、他の人にはこの数字が何を意味するのか、すぐにはわかりません。
少し調べればわかることでも、その少しの労力をチームメンバーに強要すべきではありません。

先ほどのコードを第三者にもわかりやすくすると以下のようになります。

<?php if ($category == get_category_by_slug("news")->term_id) {
    // 何かしらの処理
} ?>

どうでしょうか?
先ほどは『5』が何かわかりませんでしたが、一目でnewsカテゴリーと比較していることがわかると思います。

このようにチームメンバーに優しいコードを心がけましょう。

私自身カテゴリーIDの取得方法をよく忘れるので、メモ代わりに書いてます。

宣伝
WordPressサイトのテンプレート編集やトラブル対応、バグ修正、簡単なJavascriptの作成(カルーセルやバリデーション等)など、小規模なスポット対応を受け付けております。
もしお困りごとがありましたら、お問い合わせフォームよりご相談ください。

この記事を書いた人

uilou

uilou

プログラマー

基本的に、自分自身の備忘録のつもりでブログを書いています。 自分と同じ所で詰まった人の助けになれば良いかなと思います。 システムのリファクタリングを得意としており、バックエンド、フロントエンド、アプリケーション、SQLなど幅広い知識と経験があります。 広いだけでなく、知識をもっと深堀りしていきたいですね。