【WordPress】記事スラッグをループ内で取得・表示する最短コード get_post_field

WordPress
スポンサーリンク

WordPress構築の現場で、記事ごとの「スラッグ(URLの末尾)」をCSSのクラス名やアンカーリンクに使いたい場面、ありますよね。

「IDじゃなくて、英数字の文字列で管理したいんだよなあ……」という、あのムズムズする瞬間です。

この記事では、投稿や固定ページのスラッグをサクッと取得し、HTML内に出力する方法を解説します。

ループ内でのスラッグ取得・表示は get_post_field で完結する


結論から言います。single.php や archive.php などのテンプレートファイル(ループ内)であれば、以下のコードをコピペするだけでOKです。

取得・表示用のコード


これだけ。シンプルすぎて「え、これだけ?」と拍子抜けしたかもしれませんね。

実際にループ処理の中に組み込むと、以下のような記述になります。


正直なところ、グローバル変数の $post->post_name を直接参照しても同じ結果は出ます。

ただ、関数経由(get_post_field)の方がキャッシュを利用してくれる分、行儀が良いコードと言えるでしょう。「急がば回れ」ってやつですね。

なぜ the_slug() みたいな関数はないのか?

WordPressには the_title() や the_content() があるのに、なぜか「the_slug()」という関数は標準で存在しません。

そのため、今回紹介した get_post_field() を使うか、$post オブジェクトから直接引っ張ってくる必要があります。

この仕様のおかげで、初心者のうちは「スラッグ 取得 方法」で検索の海をさまようことになるんですよね……。

補足:取得できる「post_name」とは?

ここで指定している post_name というパラメータ。これがデータベース上のカラム名で、いわゆる「スラッグ」を指します。

日本語URLを使用している場合は、エンコードされた文字列(%e3%81…みたいなやつ)ではなく、デコードされた状態、あるいは設定した英数字が返ってきます。

  • メリット: ページ固有のID(#service, #about 等)を動的に生成できる。
  • 注意点: スラッグを変更するとリンク切れやCSS崩れの原因になる。
運用フローまで考慮するなら、クライアントさんには「スラッグは変えないでくださいね!」と、釘を刺しておくのが無難でしょう。

コメント

タイトルとURLをコピーしました