【WordPress】投稿ページのslug(スラッグ)を取得する方法

WordPressの投稿や固定ページの個別ページでslug(スラッグ)を参照したいことって案外あります。

get_the_ID()のように一発でとれる関数はなく、いつもどのように取得しようか迷うのでメモしておきます。

slug(スラッグ)を取得する方法

<?php
$slug = $post->post_name;
?>

上記でページの「slug」を取得できます。固定ページでも投稿でも同じ方法で「slug」を取得できます。

僕は一先ずこの方法で取得するようにしようかと思っています。

注意点

「while (have_posts()) : the_post();」のループ内で使用しないと「$post」に正しく投稿情報が入っていない場合があります。

投稿ページ、固定ページの個別ページは実際は1回しかループしていませんが、処理上ループさせていることが多いので、ループ内と書かせていただきました。

投稿IDや固定ページIDが分かる場合

ループ外からでも取得したいページのIDが分かっている場合は「slug」を取得することができます。

<?php
// $idには取得したいページのIDが入っています
$post_info = get_post($id);
$slug = $post_info->post_name;
?>

こちらは少し特殊な状況かと思いますが、たまに使うかも?

ページURLにslugが入っている場合

ループ外からでもURLにslugが入っている場合は「slug」を取得することができます。

<?php
$slug_name = basename(get_permalink());
?>

URLにURLパラメータ(?~)やページ内リンク(#~)がある場合でも正常に取得できました。

注意点

パーマリンク設定でslugが入らない「数字ベース」などに設定している場合、投稿ページではslugを取得できません。固定ページはURLにslugが入ったままなのでこの方法で取得可能です。

パーマリンク設定はサイトによって異なるので、個人的には、この対応方法はちょっと微妙かなと思います。

まとめ

slugを取得する関数はありませんが、簡単に取得することはできます。

いくつか方法があって悩みますが、今後は「$slug = $post->post_name;」を使う方向でいきたいと思います。

場合によっては他のも使えるかもしれないですね。

頭の片隅にでも置いておこ。