【WordPress】投稿のスラッグを取得する方法|get_post_fieldでpost_nameを取り出す

【WordPress】投稿のスラッグを取得する方法 WordPress

WordPressでは、投稿のURLの一部として使用される「スラッグ」は、カスタムURLや条件分岐、クエリ処理などで活用されることが多い重要な情報です。この記事では、投稿のスラッグを取得する具体的な方法を紹介します。逆に「スラッグから投稿を取得したい」場合はスラッグからページや投稿を取得する方法を参照してください。

この記事でわかること

  • 現在表示中の投稿のスラッグを取得する
  • ループ内で投稿ごとにスラッグを取得する
  • 投稿IDが分かっている場合にスラッグを取得する
スポンサーリンク

スラッグとは?

スラッグ(slug)とは、投稿や固定ページ、カスタム投稿タイプに割り当てられるURLの末尾部分のことで、通常は英数字で構成されます。たとえば https://example.com/sample-post というURLのsample-post がスラッグにあたります。

現在表示中の投稿のスラッグを取得する方法

テンプレートファイル内で、現在表示されている投稿のスラッグを取得するには、次のコードを使用します。

PHP:現在の投稿のスラッグを取得
$slug = get_post_field('post_name', get_post());
echo esc_html($slug);

get_post() で現在の投稿オブジェクトを取得し、get_post_field() 関数で post_name(=スラッグ)を取り出しています。出力時は esc_html() でエスケープします。

ループ内で投稿のスラッグを取得する場合

WordPressループの中で投稿ごとにスラッグを取得したい場合は、次のように記述します。

PHP:ループ内で各投稿のスラッグを取得
if (have_posts()) :
  while (have_posts()) : the_post();
    $slug = get_post_field('post_name', get_the_ID());
    echo '<p>スラッグ: ' . esc_html($slug) . '</p>';
  endwhile;
endif;

特定の投稿IDからスラッグを取得する

特定の投稿IDが既に分かっている場合、その投稿のスラッグは次のように取得できます。

PHP:投稿IDを指定してスラッグを取得
$post_id = 123; // 任意の投稿ID
$slug = get_post_field('post_name', $post_id);
echo esc_html($slug);

関連するスラッグのカスタマイズ

よくある質問(FAQ)

Q記事のスラッグ(URL文字列)を取得するにはどうすればよいですか?
Aget_post_field('post_name', $post_id) または $post->post_name で取得できます。ループ内では global $post; を使って $post->post_name にアクセスすることもできます。スラッグはパーマリンクの一部で、URLに使われる英数字・ハイフンの文字列です。
Qスラッグを記事タイトルから自動生成するルールはどうなっていますか?
AWordPressは記事保存時にタイトルをサニタイズしてスラッグを生成します。日本語タイトルはそのままスラッグになります(URLエンコードされます)。記事作成後でも管理画面のパーマリンク欄でスラッグを手動変更できます。既存記事のスラッグを変更する場合は301リダイレクトの設定を推奨します。
Qスラッグを英語化するプラグインはありますか?
AWP Multibyte Patchなどのプラグインで対応できる場合があります。もっとも確実なのは、記事編集時に「パーマリンク」欄をクリックして手動で英語のスラッグを入力する方法です。SEOプラグインにスラッグ管理機能が含まれる場合もあります。

まとめ

  • 基本get_post_field('post_name', $post_or_id)
  • 現在の投稿get_post() を渡す
  • ループ内get_the_ID() を渡す
  • 特定ID:投稿IDを直接渡す
  • 出力:必ず esc_html() でエスケープする

get_post_field('post_name', ...) を使えば、現在表示中の投稿・ループ中の投稿・特定IDの投稿いずれにおいても柔軟にスラッグを取得できます。逆にスラッグから投稿を取得したい場合はこちらの記事もあわせてご覧ください。