wordpressのスラッグの意味と取得

wordpressでいうところのスラッグは、ウィンドウズやサーバでいうところのファイル名に該当します。スラッグって色々な意味を持つようで、なめくじなんかは強烈ですね。綴りは「slug」で、wordpressの関数名でも文字列に組み込まれています。変数に代入する時なんかも慣習的に「$slug」とすることが多いようです。もちろん、変数名なんかなんでも良いのですが、分かりやすいからでしょう。ただ、なぜwordpressでスラッグという言葉が用いられているのかは不明です。

ウィンドウズだと

FILEはフォルダの中に入っており、フォルダのなかには更にフォルダがあったり、FILEがあったりします。例えば、デスクトップは「C:\Users\username\Desktop」のようなアドレスになります。デスクトップに「note.txt」というファイルを保存した場合、このアドレスは「C:\Users\username\Desktop\note.txt」となります。コマンドプロンプトでCドライブへ移動してからこれを打ち込むと、自動的にメモ帳が開かれます。つまり、フォルダを経由しながら行き止まりとなった地点ともいうべきかも。ちなみにコマンドプロンプトは基本的にキーボードのみで操作するタイプ。CUIといいます。貴方が今見ている画面はきっとGUI。

サーバでは

一方、サーバも似たような概念ですが、こちらはフォルダとは言わず、ディレクトリというのが一般的です。同じように行き着いた先のファイルがwordpressでいうところのスラッグとなります。ちなみにサーバはホームページなどを公開するためのコンピュータのことです。windowsなどをOSといいますが、サーバではLinuxやUNIXなどのOSがインストールされており、基本的には後者のほうがサーバ向きというだけで、似たようなものだとお考え下さい。そのほうが分かりやすいと思います。

wordpressなどのCMSが登場する以前のホームページは?

手動で作ったファイルに名前とhtmlやphpなどの拡張子をつけ、FTPでアップロードしてました。そのため、かつてのホームページでもwordpressのスラッグがファイル名となります。ちなみにCMSはwordpressのようなコンテンツ・マネジメント・システムのことを言います。日本語にすると、内容を管理する仕組みのこと。CMSの登場でファイル名と拡張子の概念が大きく変化しました。拡張子はFILEの種類とお考え下さい。要は、記事を管理する上で重複しない名前をつけるためだけの仕組みであるため、ディレクトリ構造なんかは昔と違って完全に無視されています。

パーマリンクとスラッグの違い

パーマリンクとは、半永久的なURLのこと。これに対しスラッグとはデータベースで管理されている各記事の「post_name」に当たる部分の事。いわば、各記事につけた固有の名前のことですね。しかし、wordpressのパーマリンクの設定によっては、このスラッグを含めたり含めなかったり、IDを使って数字表記したりできるので、その本質的な意味が分かりにくくなっています。wordpressでURLに含めた場合は、大抵末尾になります。一番最後のスラッシュの右側からスラッシュと拡張子を抜いた部分ですね。もっともこれからwordpressを始めようとするかたで、拡張子を指定したいと考える人はあまりいないかも知れませんが。

wordpressのslugは活用できる

存在の意味

スラッグの本来の目的は、重複のないユニークな名前をつけて異なるコンテンツを同じURLで公開しないようにするためのものだと思います。データベースの管理だけだとIDで十分なのですが、これだと数字表記になるため、URLは味気ないものになってしまいます。そこでスラッグという概念を持ち込むことで、URLの幅広い表現を可能にしています。wordpressのスラッグは本来そういうもののために存在しているのでしょう。

ちなみにディレクトリ構造の原則に則ったかつてのやりかただと、アップロード時に同じ名前は上書きされますので、あとからアップロードしたコンテンツが公開されます。つまり、その前に公開したコンテンツは無駄になる訳ですね。

しかし、wordpressでは基本的にコンテンツを見かけ上一つのFILEで管理しており、その中から必要なコンテンツを部分的に取り出しています。仮に同じ名称で重複するようなURLなどにしてしまうと、予期せぬ動作をすることになります。それを防ぐためにwordpressのスラッグは投稿時に重複があれば、重ならないように末尾へ数字を追加しています。

別の活用方法

実はwordpressのスラッグって、プログラムの条件分岐で便利な目印になるのですよ。スラッグに限らずIDもそうですけれどね。これらはユニークな目印になるため、テンプレートやプラグインなど、様々なところで使われています。wordpressの記事にはID番号があるから、それで済むじゃないかと言われそうですが、まあ数字より英数字のほうが可読性がよくなります。スラッグが日本語だとエンコードされて余計にややこしくなりますが、単にユニーク性を求めて条件分岐の目印に使うのであれば大差ないと思います。

テンプレート上での表示と取得

1-1、wordpressの投稿・固定ページでスラッグ取得。

echo $post->post_name;


1-2

echo get_post(get_the_ID())->post_name;


1-3

echo get_post_field( 'post_name', get_post());


1-4

echo get_post_field( 'post_name', get_the_ID());

2、ワードプレスの投稿・固定ページでID取得。

echo get_the_ID();

3、ワードプレスの投稿・固定・カテゴリーでID取得。

echo $wp_query->get_queried_object_id();

4、ワードプレスの固定ページでスラッグ、投稿でID取得。

echo basename(get_permalink());

5、ワードプレスの投稿とカテゴリーでスラッグ取得。

echo get_the_category()[0]->category_nicename;

6、ワードプレスの投稿とカテゴリーでID取得。

echo $catgory = get_the_category()[0]->cat_ID;

7、ワードプレスの投稿・固定ページでパーマリンクを表示。

the_permalink();

8、ワープレの投稿・固定ページでパーマリンクを取得。

echo get_permalink();
echo get_the_permalink();

ワープレのテンプレート上で表示するだけなら上記の方法で構いませんが、取得して処理をする場合は、変数に代入してください。「echo」の部分を削除して「$slug = 」など、適当な変数名にイコールを追記して使います。「7」は「echo」が無い点を注視して下さい。この関数はそのままで出力します。また、これらの関数がループ内で使えるかどうかは、実際に記述して確認してください。挿入する場所によってはうまく動作しないことがあるからです。「global $post;」といった感じでアロー演算子の左側の変数を指定することでうまく動くこともありますが、「global 」の乱用は誤動作の原因になりやすいです。そして、これらの関数の中でよく使うと考えられるのは、「1-1」「2」「5」「6」「7」「8」です。「8」の二つはエイリアスといって別名のことです。どちらを使っても同じ結果を返します。

まとめ

いかがでしたでしょうか、ワープレのスラッグ。独自のURLを作るだけに役立っているわけではなく、結構色んなことに活用できたりします。特にワープレのパーマリンク設定で「%postname%」を指定していると、特定の記事に変化を与える時に可読性のある分かりやすい形で利用できます。例えば、記事のネームを幾つか配列に入れ、特定の記事では独特の表示をしたり、スタイルシートを読込んだり、タグを整形したり、といったことが出来ます。