こんにちは、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」が付いてしまう場合の対処のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。