私はすべての異なる投稿タイプの管理者メニューサブメニューページを設定するプラグインに取り組んでいます。
これらの新しいサブメニューページをトップレベルメニュー項目の対応する投稿タイプに関連付けることができる必要があります。 $_GET
の使用に頼らなくてもこれは可能ですか?
$typenow
はedit.php
で使用されていますが、カスタムページでは使用できません。NULL
のみが返されるためです。
だから基本的に:どのように私はカスタムメニュー項目に適切な/関連する投稿タイプを設定しますか。
更新:
これが私がしていることをもう少しうまく説明しているイメージです。
現状では、サブメニューのカスタムアイテムはPagesがアクティブなときにのみ利用可能です。そうでないと$_GET
はpost_type
を取得できません。
私が使っている:
$post_type = esc_attr( $_GET['post_type'] );
$post_type_object = get_post_type_object( $post_type );
$title = $post_type_object->labels->name;
$page = add_submenu_page( 'edit.php?post_type=' . $post_type, $title, $title, 'edit_pages', 'order-' . $post_type, 'cmspo_menu_order_page' );
そのため、私はカスタムアイテムを関連付けるべき適切な投稿タイプを取得する方法が必要です。この場合は "page"ですが、各カスタム投稿タイプの下にcapability_type
"page"に登録されているカスタムアイテムがあります。 "役職"。
サブメニューページの出力をレンダリングするコールバック関数には、現在の投稿タイプに関する情報が必要です。そしてこの時点でたくさんの情報が用意されています。
add_action( 'admin_menu', 'wpse_60730_demo_submenu' );
/**
* Register sub menu pages.
*
* Note that get_current_screen() is still NULL now.
*
* @wp-hook admin_menu
* @return void
*/
function wpse_60730_demo_submenu()
{
// get public post types
$post_types = get_post_types( array ( 'public' => TRUE ) );
foreach ( $post_types as $post_type )
{
add_submenu_page(
"edit.php?post_type=$post_type",
"Extra $post_type", // this should be made translatable
"Extra $post_type", // this too
"edit_{$post_type}s",
"order-$post_type",
'wpse_60730_demo_callback'
);
}
}
/**
* Render the sub menu page output.
*
* All information is set now.
*
* @return void
*/
function wpse_60730_demo_callback()
{
$screen = get_current_screen();
global $typenow, $parent_file;
print "<pre>get_current_screen()\n" . htmlspecialchars( print_r( $screen, TRUE ) ) . '</pre><hr>';
print "<pre>\$typenow: " . htmlspecialchars( print_r( $typenow, TRUE ) ) . '</pre><hr>';
print "<pre>\$parent_file: " . htmlspecialchars( print_r( $parent_file, TRUE ) ) . '</pre>';
}