web-dev-qa-db-ja.com

カスタム投稿タイプをサブメニューに挿入して注文する

[〜#〜] tldr [〜#〜]:バックエンドで、メニューページ内にカスタム投稿タイプを追加したいと思います(これが可能です)。しかし、結果のサブメニューページを注文できません。


3つのカスタム投稿タイプ「A」、「B」、「C」があり、次のことを実行したい:

  1. グループ「マイカスタムページ」と呼ばれる1つのメニューページの下に3つのコンテンツ
  2. 「マイカスタムページ」をクリックすると、「マイカスタムページ」のコンテンツにリダイレクトされ、カスタム投稿タイプの1つではない

前半はかなり簡単に達成できました。次のようにメニューページを作成しました。

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
Cerere

答えを見つけました。短くするには:

ソリューション1

メニュー項目にカスタム投稿タイプを追加するだけの場合は、ソリューション番号1を使用します(これには、add_menu_pageおよび設定'show_in_menu=>'をメニューページに追加します)。機能しますが、新しく作成したメニューページをクリックすると、最初のCPTにリダイレクトされます(サブページはリストの最後にプッシュされます)。

ソリューション2

カスタム投稿タイプをグループ化する場合は、メニューページをクリックしてサブページに移動し、ソリューション番号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' );

万が一あなたがより良い方法を見つけた場合は、私の解決策を自由に追加/修正してください!

1
Cerere

更新:次のようにメニューページを作成する必要があります。

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を表示]を選択すると、編集と変更が可能になり、[メニューに表示]を選択すると、デフォルトでサブメニューとしてメニューに追加されます。これで、投稿タイプを編集するときに親メニューが選択された状態で表示されるようにするために、追加の関数を追加する必要はありません。

0
Rodrigo García