カスタム投稿タイプのメニューを別のカスタム投稿タイプのサブメニューとして追加することは可能ですか


28

現在、2つのカスタム投稿タイプを使用しているワードプレスプラグインを開発しています。ここで知りたいこと:カスタム投稿タイプメニューを別のカスタム投稿タイプのサブメニューとして追加することは可能ですか?

回答:


59

はい。投稿タイプを登録するときshow_in_menu、表示したいページに設定する必要があります。

投稿のサブメニューとしてカスタム投稿タイプを追加する

ここでは、[ムービー]投稿タイプを[投稿]のサブメニューに含めるように設定します。

register_post_type( 'movies',
    array(
            'labels' => array(
                    'name' => __( 'Movies' ),
                    'singular_name' => __( 'Movie' )
            ),
    'public' => true,
    'has_archive' => true,
    'show_in_menu' => 'edit.php'
    )
);

カスタム投稿タイプに分類法を登録している場合は、ページにも追加する必要があります。

ではadd_submenu_page()最初の引数に代入するページで、最後は、メニュースラグです。

add_action('admin_menu', 'my_admin_menu'); 
function my_admin_menu() { 
    add_submenu_page('edit.php', 'Genre', 'Genre', 'manage_options', 'edit-tags.php?taxonomy=genre'); 
}  

別のカスタム投稿タイプのサブメニューとしてカスタム投稿タイプを追加する

ページを別のカスタム投稿タイプに追加するには、ページ名とともに投稿タイプのクエリ文字列パラメータを含めます。

投稿タイプEntertainmentの下にCPT Moviesとその分類ジャンルを追加するには、このようにコードを調整します。

edit.php になる edit.php?post_type=entertainment

edit-tags.php になる edit-tags.php?taxonomy=genre&post_type=entertainment

register_post_type( 'movies',
    array(
            'labels' => array(
                    'name' => __( 'Movies' ),
                    'singular_name' => __( 'Movie' )
            ),
    'public' => true,
    'has_archive' => true,
    'show_in_menu' => 'edit.php?post_type=entertainment'
    )
);

add_action('admin_menu', 'my_admin_menu'); 
function my_admin_menu() { 
    add_submenu_page('edit.php?post_type=entertainment', 'Genre', 'Genre', 'manage_options', 'edit-tags.php?taxonomy=genre&post_type=entertainment'); 
}

2
ありがとね。できます。しかし、サブメニューcptはサブメニューを失いました。
アリ

分類法を含める方法で回答を更新しました。
-epilektric

こんにちは、ありがとう!私はそれをする方法を見つけました!しかし、より良い結果が得られるかもしれません!
アリ

show_in_menu属性には、私のために働いていませんでした。
フランシスココラレスモラレス

繰り返してすみません。サブメニューとパレットメニューが強調表示されたままになるようにするには、WPにさらに情報を提供する必要があります。OK、「show_in_menu」パラメーターは、「my_post_type」が画面上にあるときにサブメニューを現在/強調表示にします。ここで、親メニューを強調表示する別のアクションも追加する必要があります。これを試すことができます:add_filter( 'parent_file'、 'menu_highlight')); function menu_highlight($ parent_file){global $ plugin_page、$ post_type; if( 'my_post_type' == $ post_type){$ plugin_page = 'edit.php?post_type = my_post_type'; //サブメニューフック名} return $ parent_file; }
TomeeNS

6

カスタム投稿タイプ:

$args['show_in_menu'] = false;
register_post_type('custom_plugin_post_type', $args);

既存のカスタム投稿タイプ(たとえば「製品」)に彼を追加します。

$existing_CPT_menu = 'edit.php?post_type=product';
$link_our_new_CPT = 'edit.php?post_type=custom_plugin_post_type';
add_submenu_page($existign_CPT_menu, 'SubmenuTitle', 'SubmenuTitle', 'manage_options', $link_our_new_CPT);

または、カスタムプラグインメニューに追加します。

// Create plugin menu
add_menu_page('MyPlugin', 'MyPlugin', 'manage_options', 'myPluginSlug', 'callback_render_plugin_menu');

// Create submenu with href to view custom_plugin_post_type
$link_our_new_CPT = 'edit.php?post_type=custom_plugin_post_type';
add_submenu_page('myPluginSlug', 'SubmenuTitle', 'SubmenuTitle', 'manage_options', $link_our_new_CPT);

ありがとう!それは私に役立ちます。
NSukonny
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.