サイトを公開し納品してから、クライアントによって追加された固定ページのスラッグが日本語のままになっていて、リンクを共有するとやたらと長い文字化けのようなリンクになってしまうことはないでしょうか。
クライアントは気にしてなかったりしますが、制作者としては結構気持ち悪かったりします。また、後から言われるケースもあるので、デフォルトでそのようにならないように設定して納品するといいのかなと思います。しかも途中で導入するとURLの変更になってしまいますからね・・・
ということで、スラッグ名が日本語だったら自動的に投稿タイプ+id付与へ変更する方法をご紹介します。
スラッグを自分で設定した場合は適用しません。また、投稿タイプとは例えば固定ページの場合「page」になります。
ちなみに、パーマリンク設定をpostnameやpost_id等に設定しているケースに限ります。
WordPress の投稿スラッグを自動的に生成する | Simple Colors
何がどうなるのか?
まずは、何も設定していない場合は日本語がそのままURLとなります。
このままだとURLを共有したりするときに文字化けのような長いURLに変更されてしまいます。例えば以下のようにTwitterで共有しようとすると、、、
はい、実際は5文字程度の日本語ですがこのように長い文字列に変換されてしまいます。
そこで、今回ご紹介のコードを導入すると自動的に「投稿タイプ+ID」というスラッグ名へ変更してくれます。
自分でスラッグ名を変更した場合は自動変換は無効となり自分で設定したスラッグ名が適用されます。
サンプルコード
以下をfunctions.phpの任意の場所へ書きます。バックアップは適宜取っておきましょう。
/* * スラッグ名が日本語だったら自動的に投稿タイプ+id付与へ変更(スラッグを設定した場合は適用しない) */ function auto_post_slug( $slug, $post_ID, $post_status, $post_type ) { if ( preg_match( '/(%[0-9a-f]{2})+/', $slug ) ) { $slug = utf8_uri_encode( $post_type ) . '-' . $post_ID; } return $slug; } add_filter( 'wp_unique_post_slug', 'auto_post_slug', 10, 4 );
既に登録されているページにも適用されるため、運用によっては注意
ちなみに、既に登録されているページについても設定されます。
そのためサイト運用中の場合はリンクが変更になるためご注意ください。