sanitize_title():文字列をスラッグ(URL に使える形)にする(WordPress)

WordPress

文字列を、URL に使える形(スラッグ)にします。英字は小文字に、空白や記号はハイフンになり、タグは消えます。日本語は英字にはならず、URL エンコードされた形(%e3%81%93 のような形)で残ります。WordPress が投稿のタイトルからスラッグを作るときにも、この関数を使っています。

書き方

sanitize_title( string $title, string $fallback_title = '', string $context = 'save' ): string
  • $title:スラッグにしたい文字列です。
  • $fallback_title(省略できる):結果が空になったときに、代わりに使う文字列です。
  • $context(省略できる):'save'(既定)のときは、é のようなアクセント付きの文字を英字(e)に直します。'query' のときは直しません。
  • 戻り値:スラッグにした文字列です。

使い方の例

作業環境(WordPress 7.1.3)で試した結果を、コメントに書いています。

echo sanitize_title( 'Hello World' );            // hello-world
echo sanitize_title( '<b>Bold</b> Title' );      // bold-title
echo sanitize_title( 'Café & Bar' );             // cafe-bar
echo sanitize_title( 'Café & Bar', '', 'query' ); // caf%c3%a9-bar
echo sanitize_title( 'wp_create_nonce' );        // wp_create_nonce(_ は残る)
echo sanitize_title( '', 'untitled' );           // untitled

// 日本語は英字にならず、URL エンコードされる
echo sanitize_title( 'こんにちは' );             // %e3%81%93%e3%82%93%e3%81%ab%e3%81%a1%e3%81%af
echo urldecode( sanitize_title( 'こんにちは' ) ); // こんにちは
echo sanitize_title( 'WordPress 6.5 の新機能!' ); // wordpress-6-5-%e3%81%ae%e6%96%b0%e6%a9%9f%e8%83%bd

よくある間違い

  • 日本語から英字のスラッグができると思う:日本語は英字(ローマ字や英語)にはなりません。英字のスラッグにしたいときは、自分で決めて渡します。
  • 長いスラッグになる:日本語は 1 文字が「%e3%81%ae」のような 9 文字になります。「wp_create_nonce:フォームや REST API の合言葉(nonce)を作る(WordPress)」というタイトルを通すと、192 文字のスラッグになりました。
  • _ がハイフンになると思う:アンダースコアは残ります。ハイフンにしたいときは str_replace( '_', '-', $slug ) などで替えます。
  • 重なりを調べると思う:同じスラッグの投稿がもうあるかは見ません。重ならないスラッグにするのは wp_unique_post_slug() です。
  • 表示するときのエスケープの代わりにはなりません。HTML に出すときは esc_html() や esc_attr() を使います。

関連する関数

  • sanitize_title_with_dashes():空白や記号をハイフンにする(sanitize_title() の中で使われる)
  • remove_accents():アクセント付きの文字を英字に直す
  • wp_unique_post_slug():ほかの投稿と重ならないスラッグにする
  • sanitize_key():オプションの名前などに使う、英小文字・数字・_・- だけの文字列にする

逆引きリファレンスの一覧へ