【2021/9/18】登録不要の見積書作成ツール
「SPEEC」を公開しました!

【WordPress】カスタム投稿のスラッグをIDにすると「-2」が付いてしまう

こんにちは、ryohei(@ityryohei)です!

本記事では、WordPressのカスタム投稿タイプのスラッグに投稿IDを指定すると、「-2」のような枝番が付いてしまう場合の対処をご紹介しています。

カスタム投稿を追加したばかりで他の投稿のスラッグと重複しているわけでもないのに「-2」がついてしまう……

上記のような状況の方に参考にしていただければ幸いです。

では、解説していきます。

【結論】hierarchicalがtrueになっている

カスタム投稿タイプでhierarchicaltrueに、Custom Post Type UIの設定項目では階層に指定すると、パーマリンクに使用されるスラッグに整数のみの値を指定することができなくなります。投稿IDに関係なく整数のみの値は指定できません。

そのためカスタム投稿のスラッグにpost_idを指定したい場合は、必要がない場合はhierarchicalはfalseにしておきましょう。

なぜ階層を持たせると整数をスラッグにできないのか

WordPressのコードを深く追っていったわけではないですが、投稿の追加等を実行する際にスラッグ(post_name)には下記関数の実行結果が代入されています。

$data['post_name'] = wp_unique_post_slug( $data['post_name'], $post['ID'], $post['post_status'], $post['post_type'], $post['post_parent'] );

関数の全体像は下記をご参照ください。

https://core.trac.wordpress.org/browser/tags/5.8/src/wp-includes/post.php#L4736

wp_unique_post_slug()は引数のpost_nameに基づいて投稿の一意のスラッグを取得する関数です。(一意でない場合は-2などの枝番が付けられます。)

もし指定した投稿タイプが階層を持っている場合、post_idpost_parentpost_type名と同様のpost_name(スラッグ)を付けることはできなくなっているようです。整数は将来的にpost_idで使用されるため、関数内でいうところのbad_slug判定となり、スラッグ(post_name)には指定できず、「-2」等の枝番が付けられる……

そのため階層を持たせるとスラッグに整数を指定できないのだと思います。

最後に

念のためお伝えしておくと、私自身WordPressのソースをじっくり深いところまで追ったことがないため、後半についてはあくまでそんな感じだろうなー程度の憶測でしかありません。

本記事で伝えたかったのはカスタム投稿でスラッグに投稿IDのような整数を指定したい場合は階層を持たせるのはやめましょうということですので、その点だけ伝わってくれていると嬉しく思います!

以上、WordPressでカスタム投稿のスラッグをIDにすると「-2」が付いてしまう場合の対処のご紹介でした!

短期間でプログラミングを習得してエンジニアになろう!

エンジニアに転職を考えている方、独学で勉強中の方必見!CodeCampなら自宅にいながら実務経験があるエンジニアからマンツーマンで指導してもらうことができます。実践的なスキルを習得して一日でも早いエンジニアデビューを目指しましょう。まずは無料体験から!

CodeCamp 公式サイトへ

おすすめの書籍