【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」が付いてしまう場合の対処のご紹介でした!

Adobe Creative Cloudのコンプリートプランを特別価格で手に入れよう!

Adobe Creative Cloud(Adobe CC)はAdobe社が提供するクリエイター向けのサービスです。WEB制作の幅を広げる「Photoshop・Illustrator・XD」Youtuberや動画クリエイターの編集作業に欠かせない「Premiere Pro・After Effects」など全20以上のアプリが提供されており、幅広いプランが用意されています。

コンプリートプランはAdobe CCの全20以上のアプリが使用できるプランです。多くのアプリが使用できるため定価で購入すると年間7万円以上するプランですが、デジタルハリウッドのAdobeマスター講座では「基礎動画教材+Adobe CC コンプリートプラン(12ヵ月)」がセットになって39,980円(税込)で利用できます。定価より安価にAdobe Creative Cloudのライセンスを購入でき、以降のライセンス更新も可能。動画教材で基礎スキルを習得できるので、入門する方にも便利な講座です。詳しくは下記のリンクからチェックしてみてくださいね。

Adobeマスター講座はこちら

おすすめの書籍