【WordPress】カスタム投稿のスラッグをIDにすると「-2」が付いてしまう
※本ページのリンクにはプロモーションが含まれています。
こんにちは、Ryohei(@ityryohei)です!
本記事では、WordPressのカスタム投稿タイプのスラッグに投稿IDを指定すると、「-2」のような枝番が付いてしまう場合の対処をご紹介しています。
カスタム投稿を追加したばかりで他の投稿のスラッグと重複しているわけでもないのに「-2」がついてしまう……
上記のような状況の方に参考にしていただければ幸いです。
では、解説していきます。【結論】hierarchicalがtrueになっている
カスタム投稿タイプでhierarchical
をtrue
に、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'] );
関数の全体像は下記をご参照ください。
wp_unique_post_slug()
は引数のpost_name
に基づいて投稿の一意のスラッグを取得する関数です。(一意でない場合は-2などの枝番が付けられます。)
もし指定した投稿タイプが階層を持っている場合、post_id
、post_parent
、post_type
名と同様のpost_name
(スラッグ)を付けることはできなくなっているようです。整数は将来的にpost_id
で使用されるため、関数内でいうところのbad_slug
判定となり、スラッグ(post_name
)には指定できず、「-2」等の枝番が付けられる……
そのため階層を持たせるとスラッグに整数を指定できないのだと思います。
最後に
念のためお伝えしておくと、私自身WordPressのソースをじっくり深いところまで追ったことがないため、後半についてはあくまでそんな感じだろうなー程度の憶測でしかありません。
本記事で伝えたかったのはカスタム投稿でスラッグに投稿IDのような整数を指定したい場合は階層を持たせるのはやめましょうということですので、その点だけ伝わってくれていると嬉しく思います!
以上、WordPressでカスタム投稿のスラッグをIDにすると「-2」が付いてしまう場合の対処のご紹介でした!