WordPressのパーマリンクから最後のアドレス(スラグ)を抜き出す

丸一日悩んでやっとできたのでメモ。

タイトルからすると何がなにやらですが、要するに表示しているページのスラグを抜き出す方法です。
Wordpressはページ毎にスラグという個別の名前を割り当てることができ、それがURL上では「http://wphoge.co.jp/スラグ」という感じに表示されます。

WordPressのテンプレートタグだとせいぜいスラグ付きのフルパスしか取得できず、正規表現で抜き出す方法とか文字を切り出す関数を使う方法とかを考えていたのですがどうにもいいのが見つからず。

そうこう調べているうちに、こちらのフォーラムで投稿情報から一部の情報を抜き出すpost_nameというものが見つかってなんとか解決できました。

postsループ内で以下のコードを使えば抜き出すことができます。

<?php echo attribute_escape( $post->post_name ); ?>

上記のコードはPHP全てのバージョンで使用できるものですが、PHP5をインストールされている環境であれば以下のコードでもできるようです。

get_page($page_id)->post_name; ※$page_idは任意のページIDを記述、変数のままだと現在表示しているIDが適用される

これで、例えば「http://www.wphoge.com/slug」というURLから「slug」という部分だけ抜き出すことができます。

この手法を使用する利点は、Wordpressのページが持つスラグに応じてCSSを変更するということができます。標準HTMLの構成が大きく変わらないパターンのときに重宝すると思います。

CSSで指定するときには以下のような感じで指定するといいでしょう。

<div class="hoge <?php echo attribute_escape( $post->post_name ); ?>">
    CSSクラス「hoge」と取得したスラグのCSSが適用される
</div>

ちなみに、Wordpress2.8では「スラグ」という名前では存在していません。記事投稿画面の「パーマリンク」というところに統合されていますので注意してください。
あと、たぶんスラグが日本語だとうまくいかないと思うので、パーマリンクの指定は必ず英数字でやりましょう。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中