文字列を、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():オプションの名前などに使う、英小文字・数字・_・- だけの文字列にする

