投稿(記事)や固定ページを公開する時、スラッグ(URL)を自分で設定しない場合は自動的に記事や固定ページのタイトルがスラッグに設定されてしまいます。
WordPressの管理画面でパーマリンクの設定をしたり、日本語URLで運用したりしてもいいのですが、細かい設定ができなかったり、日本語URLの場合はエンコードするとURLが長くなりすぎてしまったりします。
そんなときに役立つ、投稿や固定ページのスラッグを自動設定する方法を解説していきます。
※今回の変更にはfunctions.phpを使用します。functions.phpを変更する場合は、記述を間違ってしまうと画面が白くなり何も表示されなかったり、エラーが出てしまう場合がありますのでバックアップを必ず取るようにしてください。
デフォルトの設定のままの場合の弊害
デフォルトの設定のままの場合は先程述べたように、タイトルがスラッグに設定されてしまうため、日本語の場合はリンクを設定したりする際にURLのエンコードが必要になります。エンコードされたURLは非常に長いものなり、場合によっては長すぎて認識されないこともあります。
例として、記事のタイトルが「投稿や固定ページのスラッグを自動設定する方法」だった場合、エンコードされたURLは、「%E6%8A%95%E7%A8%BF%E3%82%84%E5%9B%BA%E5%AE%9A%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%B9%E3%83%A9%E3%83%83%E3%82%B0%E3%82%92%E8%87%AA%E5%8B%95%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95」となります。
こうなると、どういったページなのかもURLからは分からなくなりますね。
また、管理画面のパーマリンク設定から記事IDなどに変更はできますが、カスタム投稿や複数のパーマリンク設定を定義することができません。そんな場合でも対応できる方法を次項で解説していきます。
自動で設定する方法
自動で設定する場合は以下のようにfunctions.phpに記述します。
function slug_auto_setting($slug,$post_ID,$post_status,$post_type){
$post = get_post($post_ID);
if ($post_type == 'post'){
$slug = 'post_'.$post_ID;
}
return $slug;
}
add_filter('wp_unique_post_slug','slug_auto_setting',10,4);
上記はデフォルトの「投稿」の記事の場合にスラッグを「post_記事ID」に自動で設定するようにしています。
これを以下のようにする事で、固定ページやカスタム投稿タイプなどにも対応可能となります。
function slug_auto_setting($slug,$post_ID,$post_status,$post_type){
$post = get_post($post_ID);
// 「投稿」の場合
if ($post_type == 'post'){
$slug = 'post_'.$post_ID;
}
// 固定ページの場合
if ($post_type == 'page'){
$slug = 'page_'.$post_ID;
}
// カスタム投稿タイプの場合
if ($post_type == 'news'){
$slug = 'news_'.$post_ID;
}
return $slug;
}
add_filter('wp_unique_post_slug','slug_auto_setting',10,4);
上記のように「投稿」の場合は$post_typeは「post」、固定ページの場合は「page」、カスタム投稿タイプの場合は「カスタム投稿タイプのスラッグ(例ではnews)」で分岐できますので個別に対応可能となります。
それぞれ「post_」・「page_」・「news_」としている箇所やスラッグの形式は自由に設定してください。
今回使用したフィルターフック「wp_unique_post_slug」は様々な応用が出来るフックとなります。
例えば、日本語スラッグの場合のみなどにもできますので色々と試してみてください。
さいごに
いかがでしたでしょうか。
今回は、投稿や固定ページのスラッグを自動設定する方法を解説しました。
スラッグは一度運用すると変更するのが中々難しい(リダイレクトやリンク切れの作業が大量に発生する)ので、最初の段階でどのように運用するのか決めてからにしましょう。