将自定义子菜单项与顶层菜单项的帖子类型关联

时间:2012-08-03 作者:INT

我正在开发一个插件,可以在所有不同的帖子类型上设置管理菜单子菜单页面。

我需要能够将这些新的子菜单页面与顶级菜单项的相应帖子类型相关联。这是否可以不依赖于使用$_GET?

我看到了$typenow 用于edit.php, 但我不能在自定义页面上使用它,因为它只返回NULL.

因此,基本上:如何将适当/关联的帖子类型设置为自定义菜单项。

UPDATED:

这张图片希望能更好地描述我所追求的。http://i.imgur.com/4q4Dy.jpg

现在,子菜单中的自定义项仅在页面处于活动状态时可用,否则$_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 “页面”而不是“帖子”。

1 个回复
最合适的回答,由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>\';
}

结果

enter image description here

结束

相关推荐

如何让is_admin()在我需要的时候返回FALSE?

我正在使用一个插件向我的访问者显示一个条款和条件页面。访问者必须同意条款和条件,才能看到网站的实际内容。当此插件处于活动状态并且显示“条款和条件”页面时,它不会使用正常的主题呈现流。相反,该插件调用get\\u header()、get\\u footer()等直接呈现页面。执行此操作时,is\\u admin()将返回true,尽管我们确实应该将“条款和条件”页面视为前端,而不是仪表板/管理面板。该主题使用is\\u admin()来决定是否将某些javascript排入队列,因此它将错误的javasc