我正在开发一个插件,可以在所有不同的帖子类型上设置管理菜单子菜单页面。
我需要能够将这些新的子菜单页面与顶级菜单项的相应帖子类型相关联。这是否可以不依赖于使用$_GET
?
我看到了$typenow
用于edit.php
, 但我不能在自定义页面上使用它,因为它只返回NULL
.
因此,基本上:如何将适当/关联的帖子类型设置为自定义菜单项。
UPDATED:
这张图片希望能更好地描述我所追求的。
现在,子菜单中的自定义项仅在页面处于活动状态时可用,否则$_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\' );
因此,我需要一种方法来获取自定义项目应该与之关联的适当帖子类型,在本例中是“页面”,但在每个已注册到的自定义帖子类型下都会有自定义项目
capability_type
“页面”而不是“帖子”。
最合适的回答,由SO网友:fuxia 整理而成
您需要在呈现子菜单页输出的回调函数中提供有关当前post类型的信息。在这一点上,有很多信息准备就绪:
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>\';
}
结果