icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【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をセット、それ以外はスラッグをそのまま返す』という形になります。

function others_id_slug_set( $slug, $post_ID, $post_status, $post_type ) {
 $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
【タグ】-

関連記事