何らかの理由で、同じ URL 構造を持つ複数の CPT を作成できません。たとえば、次のものが機能しません。
/cpt1/overview
/cpt1/events
/cpt2/overview
/cpt2/events
最終的に何が起こるかは次のとおりです。
/cpt1/overview
/cpt1/events
/cpt2/overview-2
/cpt2/events-2
wpのクリーンインストールで次のことを試して、何も混乱していないことを確認しました。
add_action( 'init', function()
{
register_post_type( 'cpt1', array(
'labels' => array(
'name' => __('CPT1'),
'singular_name' => _x('Page', 'singular name'),
'add_new' => _x('Add New', 'page'),
'all_items' => __('All Pages'),
'add_new_item' => __('Add New Page'),
'edit_item' => __('Edit Page'),
'new_item' => __('New Page'),
'view_item' => __('View Page'),
'search_items' => _x('Search Pages', 'plural'),
'not_found' => _x('No pages found', 'plural'),
'not_found_in_trash' => _x('No pages found in Trash', 'plural'),
'parent_item_colon' => '',
),
'public' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'cpt1', 'with_front' => false ),
'show_in_nav_menus' => false,
'hierarchical' => true,
'supports' => array( 'author', 'title', 'editor', 'custom-fields', 'page-attributes', 'revisions' ),
));
} );
add_action( 'init', function()
{
register_post_type( 'cpt2', array(
'labels' => array(
'name' => __('CPT2'),
'singular_name' => _x('Page', 'singular name'),
'add_new' => _x('Add New', 'page'),
'all_items' => __('All Pages'),
'add_new_item' => __('Add New Page'),
'edit_item' => __('Edit Page'),
'new_item' => __('New Page'),
'view_item' => __('View Page'),
'search_items' => _x('Search Pages', 'plural'),
'not_found' => _x('No pages found', 'plural'),
'not_found_in_trash' => _x('No pages found in Trash', 'plural'),
'parent_item_colon' => '',
),
'public' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'cpt2', 'with_front' => false ),
'show_in_nav_menus' => false,
'hierarchical' => true,
'supports' => array( 'author', 'title', 'editor', 'custom-fields', 'page-attributes', 'revisions' ),
));
} );
私ができることは何ですか?そしてどうやって?
さらなる発見
1
私はこれをさらに進めているので..ワードプレスは次のものをリダイレクトするようです(私が追加の設定をしなくても)...
/cpt2/overview/
/cpt2/events/
に
/cpt2/overview-2/
/cpt2/events-2/
2
次のwp関数wp_unique_post_slug(利用可能なフィルターを使用)を見つけました。これは、ページ/投稿のスラッグをチェックし、重複(-2、-3などを追加)が見つかった場合に一意のスラッグを返します..関数自体を見ると、 post_type チェックを行いますが、post_type が非階層として設定されている場合のみ..それ以外の場合は、すべての階層的な post_type を検索し、すべてから一意性をチェックします (例: 投稿、ページ、本、イベント ..)。