[〜#〜] tldr [〜#〜]:バックエンドで、メニューページ内にカスタム投稿タイプを追加したいと思います(これが可能です)。しかし、結果のサブメニューページを注文できません。
3つのカスタム投稿タイプ「A」、「B」、「C」があり、次のことを実行したい:
前半はかなり簡単に達成できました。次のようにメニューページを作成しました。
add_menu_page('My Custom Page', 'My Custom Page', 'manage_options', 'my-top-level-slug');
次に、各カスタム投稿タイプを次のように設定します。
'show_in_menu'=> 'my-top-level-slug'
これにより、3つのカスタム投稿タイプを1つのメニューページにまとめることができます。そして、ここに問題があります:「マイカスタムページ」をクリックすると、最初のカスタム投稿タイプ(インクルードの順序によって異なります)にリダイレクトされます–クリックします「マイカスタムページ」で、そのページにリダイレクトされます(リスト表示の統計、最も閲覧された投稿などを計画しています)。代わりに、カスタム投稿タイプが開きますが、これは私が本当に望んでいないことです。
サブメニューページを追加できると考えましたが、追加したサブメニューページは、カスタム投稿タイプの後に追加されます(したがって、サブメニューページリストの一番下にあります)。したがって、これらのサブページに順序を割り当てる方法があるかどうか疑問に思っています。「マイカスタムページ」をクリックしても、カスタム投稿タイプは表示されません。
[〜#〜]更新[〜#〜]
いくつか検索したところ、Codexに次の記事が見つかりました: https://developer.wordpress.org/reference/functions/add_submenu_page/ 。この例に従い、このコードを埋め込むことにより:
function wpdocs_register_my_custom_submenu_page() {
add_submenu_page(
'my-menu',
'My Custom Submenu Page',
'My Custom Submenu Page',
'manage_options',
'edit.php?post_type=CPT-NAME',
false
);
}
add_action('admin_menu', 'wpdocs_register_my_custom_submenu_page');
上記の2つのポイントを達成できます(グループ化が機能し、クリックするとレビューページにリダイレクトされます)。しかし、そうすることで、投稿の中に入ると(投稿の作成または編集、どちらでも構いません)、メニューページがアクティブになりません。メニューページでは、アクティブとして白でマークされていますが、それ以外の場合、メニューとサブメニューは折りたたまれている/閉じています。
以前のソリューションは正しく機能していましたが(メニュー状態に関して)、「マイカスタムページ」にカスタムページを割り当てることができませんでした。 2番目のソリューションについては、その逆です(投稿内のメニュー状態は非アクティブですが、「マイカスタムページ」を表示できます)。
答えを見つけました。短くするには:
メニュー項目にカスタム投稿タイプを追加するだけの場合は、ソリューション番号1を使用します(これには、add_menu_page
および設定'show_in_menu=>'
をメニューページに追加します)。機能しますが、新しく作成したメニューページをクリックすると、最初のCPTにリダイレクトされます(サブページはリストの最後にプッシュされます)。
カスタム投稿タイプをグループ化する場合は、メニューページをクリックしてサブページに移動し、ソリューション番号2(上記の更新を参照)に進みます:set 'show_in_menu=> false'
、次のような関数を作成します。
function create_menupages_252428() {
// https://developer.wordpress.org/reference/functions/add_menu_page/
add_menu_page(
'Page', // Page title
'Page', // Menu title
'manage_options', // Capability
'page', // Slug
'mycustompage', // Function name
'dashicons-format-aside', // Slug
1 // Order
);
// https://developer.wordpress.org/reference/functions/add_submenu_page/
add_submenu_page(
'page', // Parent slug
'subpage', // Page title
'subpage', // Menu title
'manage_options', // Capability
'edit.php?post_type=CPT', // Slug
false // Function
);
}
add_action('admin_menu', 'create_menupages_252428');
完了したら、カスタム投稿タイプの操作中にメニューページをアクティブとして表示したい場合は、
function menu_active_252428() {
global $parent_file, $post_type;
if ( $post_type == 'CPT' ) {
$parent_file = 'page';
}
}
add_action( 'admin_head', 'menu_active_252428' );
万が一あなたがより良い方法を見つけた場合は、私の解決策を自由に追加/修正してください!
更新:次のようにメニューページを作成する必要があります。
function create_home_menu(){
add_menu_page(
'Página de Inicio',
'Inicio/Home',
'manage_options',
'my_home_menu',
'mycustompage',
'dashicons-admin-home',
2
);
}
add_action('admin_menu', 'create_home_menu');
そして、投稿タイプを作成するときに、必ず'show_ui'=>true
と'show_in_menu'=>'my_home_menu'
を追加してください。ここで、 'my_home_menuは、前に作成したメニューに指定したスラッグです。
[UIを表示]を選択すると、編集と変更が可能になり、[メニューに表示]を選択すると、デフォルトでサブメニューとしてメニューに追加されます。これで、投稿タイプを編集するときに親メニューが選択された状態で表示されるようにするために、追加の関数を追加する必要はありません。