WordPress

WordPressのスラッグとは?決め方と、DB操作で使って気づいたこと

公開 更新 約5分で読めます

TL;DRこの記事の要点

  • スラッグは、記事やカテゴリをURLで表す名前
  • 英語で短く決めて、公開後は原則変えない
  • ローカルと本番でIDが違っても、スラッグなら同じ記事を探せる
  • WP-CLIで数字を渡すとスラッグ扱い。IDなら--by=idが必要
目次6項目
  1. スラッグとは?記事やカテゴリを、URLで表す名前
  2. どんなときに出てくる?
  3. 基本の決め方
  4. 自分はこう使ってます
  5. スラッグ扱いでハマった例
  6. 迷ったときの確認ポイント

WordPressの投稿画面やWP-CLIに出てくる「スラッグ」。
なんとなくURLの一部、くらいで流している人も多いと思います。
自分もそうでした。

ただ、間違えると地味に困ります。
基本と、使ってみて気づいたことをまとめます。

スラッグって、結局なに?

記事やカテゴリのURLに入る名前のことだよ。

スラッグとは?記事やカテゴリを、URLで表す名前

スラッグは、記事やカテゴリなどを、URLの中で表すための名前です。
WordPressの公式の用語集でも、スラッグはURLに使いやすくした名前、とされています。

実際のURLで見てみましょう。

https://cats-hand.pro/wp-cli-term-remove-success-uncategorized/

末尾のwp-cli-term-remove-success-uncategorizedが、この記事のスラッグです。
パーマリンク設定を/%postname%/にしているので、記事のスラッグがそのままURLの末尾に入ります。

スラッグがあるのは記事だけではありません。
固定ページにも、カテゴリにも、タグにもあります。
意外と、どこにでもいます。
初期状態の「未分類」のスラッグはuncategorized。

どんなときに出てくる?

スラッグに出会う場面は、だいたい3つです。

  • 投稿の編集画面で、URLの末尾を決めるとき
  • カテゴリやタグを作るとき
  • WP-CLIやPHPで、記事やカテゴリを特定するとき

どれも、スラッグの出番です。

WP-CLIは、ターミナルからWordPressを操作するツールです。
管理画面でポチポチやっていた作業を、コマンドで一気に片づけられるので、記事数が増えてくるととても便利です。
記事の投稿も、Claude Codeがこれでやっています。

基本の決め方

決め方の基本は、次の3つです。

  • 英語の小文字・数字・ハイフンで書く
  • URLを見ただけで何の記事か想像できる、短めの言葉にする
  • 公開前に決めて、公開後は原則変えない

日本語タイトルのまま自動で作らせると、URLが長くなります。
スラッグを指定し忘れた記事で、日本語がパーセントエンコードされた、やたら長いURLになったことがありました。
見た目がもう別物です。
以来、記事のスラッグは英語で必ず指定しています。

公開後でも、スラッグは変えられます。
ただ、変えるとURLも変わります。
つまり、別のURLです。
WordPressには、記事のスラッグを変えたとき、古いURLへのアクセスを新しいURLへ301で転送する仕組みがあります。
301は、「URLが引っ越しました」と案内する、恒久的な転送のことです。
それでも、検索結果に載ったURLが変わるのは避けたい。
なのでこのブログでは、リライトでもスラッグは変えません。

公開したあとでも、スラッグって変えられるの?

変えられるよ。ただURLも変わっちゃうから、このブログではリライトでも変えてないんだ。

自分はこう使ってます

基本は以上。
ここからが、実際に使ってみた話です。
ローカルと本番を行き来しながら、記事をコマンドやスクリプトでまとめて触る運用の中で、スラッグに助けられた場面がいくつもありました。

DB操作は、IDじゃなくスラッグで記事を探す

DB操作は、記事のデータを直接書き換える作業のことです。
ローカル環境は自分のPCで試す場所、本番環境は公開しているサイトのこと。
このブログは、この2つで同じ記事の投稿IDが違います。
記事やカテゴリのデータは、テーマのコードと違ってGitで同期する対象に入っていないので、投稿した順番やタイミングが少し違うだけで、同じ内容の記事でも別のIDが振られてしまうんです。
同じスラッグの記事が、ローカルでは228番。
本番では213番。
ズレていました。
地味に、落とし穴です。

これに気づかないまま、IDを決め打ちでバッチ処理させてしまいました。
ローカルと本番でIDが1つズレていたせいで、狙っていない記事に、検索結果に出る説明文(メタディスクリプション)が書き込まれました。

それ以来、IDは決め打ち禁止。
記事を探すときはスラッグを使っています。
PHPならスラッグから記事を探す関数のget_page_by_path、WP-CLIならwp post list --name=スラッグで探す形です。
スラッグなら、ローカルでも本番でも同じ記事を手がかりにできます。
しかも、スクリプト側で「記事が見つからなければ、その先の処理をしない」ようにしてあるので、安全弁にもなります。

IDで探せばいいんじゃないの?

ローカルと本番でIDが違うことがあるんだよね。スラッグなら同じ記事を指せるから、そっちで探してるよ。

本番の対象記事も、スラッグで特定する

関連記事の仕組みを直したときも、スラッグで探しました。
4記事とも、IDは全部違っていました。
やっぱり。
IDで探していたら、また確認作業が増えていたはず。

スラッグ扱いでハマった例

もうひとつ、スラッグで困ったことがあります。
WP-CLIで記事にカテゴリを付けるとき、渡した値が「スラッグ(または名前)」として扱われる仕様でした。

カテゴリのIDを数字で渡したつもりが、「11」という名前のカテゴリが新しく作られてしまいました。
しかも、11から16まで6個も。
IDとして渡すには、--by=idというオプションが必要です。
これだけです。
詳しくはうっかり「11」という名前のカテゴリを作ってしまった話に書いています。

別の日は、未分類を外そうとして、同じ原因で外れませんでした。
未分類のスラッグはuncategorizedなので、「1」というスラッグは見つからなかったんです。
それでもコマンドは「Success」と返してきました。
成功と言われても・・・
こちらはwp post term removeが「Success」なのに、未分類が外れなかった理由にまとめています。

迷ったときの確認ポイント

  1. 公開前に、英語の短いスラッグを自分で指定する
  2. 公開後は、理由がなければ変えない。ここ、見落としがちです
  3. ローカルと本番を行き来する作業では、IDではなくスラッグで記事を探して、見つからなければ処理が止まるようにしておく
  4. WP-CLIで数字を渡すときは、スラッグ扱いになっていないか見る

スラッグは地味です。
でも、URLにもDB操作にも関わってきます。
ローカルと本番を行き来しながら、スクリプトで記事をまとめて触るような運用になるほど、スラッグで記事を指定しておく安心感は大きくなっていきます。
最初に決めておけば、あとで助かる場面が多いです。

あわせて知っておきたい用語

パーマリンク
記事のURLの形を決める設定。スラッグがURLのどこに入るかも、ここで決まります。
301(リダイレクト)
古いURLへのアクセスを、新しいURLへ案内する転送のこと。詳しくはこちら
–by=id
WP-CLIで、渡した値をIDとして扱わせるオプション。

この記事が参考になったら、応援クリックをお願いします

Cat's Handこの記事を書いた人

Web制作歴10年以上。WordPressのテーマカスタマイズやコーディングを中心に、副業・本業ともにweb制作に携わっています。このブログでは、実際に手を動かして分かったことを書いています。