WordPressカスタマイズ事例

投稿(post)を固定ページのように階層構造にする

固定ページは標準で階層構造になっていますが、投稿(post)は階層構造になっていません。
投稿にはカテゴリがあって、その下の投稿記事はすべてフラットになるのが標準です。
でも、親投稿と子投稿のテンプレートを変えたい、という場合があります。
親投稿は親投稿でしっかり記事として執筆しつつ、その文中に、複数ある子投稿のサマリーを表示しておいて、詳細は子投稿で読ませたい、という時などです。
親子のリンク生成などをWordPressの関数で自動でできるなど、いろいろと運用の手間が省けるので、親子の関係はぜひ作っておきたいところですね。

そこで今回は、投稿(post)を親子階層構造にする方法のご案内。
 
テーマの functions.php に以下のように記述します。

add_action('registered_post_type', 'kaiza_posts_hierarchical', 10, 2);
function kaiza_posts_hierarchical($post_type, $pto){
    global $wp_post_types;
    if ($post_type != 'post') return;
    $wp_post_types['post']->hierarchical = 1;
    add_post_type_support('post', 'page-attributes');
}

 
これで、管理画面の投稿作成画面で「投稿の属性」が現れ、そこで親投稿を選択することができるようになり、WordPressの関数で親投稿、子投稿を探すこともできるようになります。
 
 
ところが・・・。
 
実は、これだけでは、親子の論理的な関係は作れても、URLの構造は変わらないのです。
親子なのだから下のようになっていてほしいですよね。
親投稿:https://domain.com/category/parent-slug/
子投稿:https://domain.com/category/parent-slug/child-slug/

でも実際はこうなります。
親投稿:https://domain.com/category/parent-slug/
子投稿:https://domain.com/category/child-slug/
 
そんな中途半端な・・・。階層って、そういうことじゃないよね・・・。
 
ということで、これをどうにか解決したい。
 
続く。
投稿(post)を階層構造にしてもURLは階層構造にならない!を解決する( parent-slug/child-slug にする)


関連するWordPressカスタマイズ事例