【WordPress】カスタム投稿のパーマリンクスラッグ指定がめんどいので、自動でidをセットする方法
| 更新: 2024/05/02 | 1746文字
今回はWordPressのカスタム投稿で、『スラッグ指定がめんどいので、自動でidをセットする』という機能を実装してみます。スラッグをいちいち考えたり、urlにタイトル日本語が入る、みたいなケースが、あんまり好ましくないこともあるかもしれません(管理人はなるべく日本語文字をurlに入れたくない)。さっそく自動idセットで代用する方法を確認していきましょう。
目次
困っている状況~通常投稿はパーマリンクにid自動セットされるが、カスタム投稿はされない件
このサイトのWordPress管理画面です。通常の投稿(post_type==post)では、パーマリンクを『post_idとpostname』にしています。通常の投稿であれば、特に問題なく使えています。
ちょっと困る状況としては、カスタム投稿のとき。そのままでは、パーマリンクにidはセットされません(カスタム投稿には効いていない)。また、自動でタイトルを拾ってパーマリンクのスラッグにしてくれるのはいいんですけど、日本語の文字が入ってきます。urlエンコードされた形式だとごっちゃになるので、id自動セットとかで代用したいです。
(*urlエンコードだと『あいうえお』が『%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A』になるので、urlがごちゃごちゃしやすい)
カスタム投稿のパーマリンクスラッグに自動でidをセットする方法
コード例(functions.php・wp_unique_post_slugフック)
こんな感じでfunctions.phpに記載してみました。使うカスタム投稿名は『others』です。仕組みとしては、『投稿タイプ判定して、該当の投稿タイプの場合はid-〇〇に$post_IDをセット、それ以外はスラッグをそのまま返す』という形になります。
$post = get_post($post_ID);
if( $post_type === 'others'){
$slug = 'id-' . $post_ID;
return $slug;
}
return $slug;
}
add_filter( 'wp_unique_post_slug', 'others_id_slug_set', 10, 4 );
また、ここには書いていませんが『初回・スラッグが空のときだけidセット』みたいなのもできます(あとから自分でスラッグが思いついたら入れられる)。
実装後の例
上記のコードで、スラッグを『$slug = 'id-' . $post_ID;』という風に指定したので、カスタム投稿時にid-〇〇のスラッグが自動的にセットされるようになりました。日本語のエンコードが入ってごちゃごちゃになりがちなurlも、これで整理されます。
カスタム投稿名は自動でパーマリンクに入ってきますが、上記のファンクション内で『カスタムタクソノミのスラッグを取得して利用( get_the_termsでスラッグを取る)』なども、お好みで追加しても良いでしょう。
あとがき・まとめ
- WordPressカスタム投稿では、通常投稿のパーマリンクにidを指定しても、自動でidがセットされるわけではない
- wp_unique_post_slugフックを使用し、投稿タイプ判定してidを自動セットすることができる
まとめると、こんなところでしょうか。個人的にはurlがごちゃごちゃしない点が気に入ってます。
【カテゴリ】- WordPressファンクションetc
【タグ】-