从add_menu_page重定向

时间:2012-07-10 17:51:30

标签: wordpress wordpress-plugin

我使用add_menu_page添加了一个菜单,所有菜单都正常工作,但点击后我希望此菜单页面打开特定帖子ID的帖子编辑器。

作为一个概念验证,我试图将javascript重定向回到do函数中,就像这样......

// Load up the menu page
 function register_availability_custom_menu_page() {
   add_menu_page('custom menu title', 'Availability', 'add_users', 'options',             'options_do_page');
}

function options_do_page() {
echo "<script type=\"text/javascript\">";
echo "window.location = '/whatever_page.php';";
echo "</script>";
}

这种方法确实有效,但我想知道这是否是最好的方法,是否有更好的方法重定向到我追求的页面?

更新

我现在也尝试使用wp_redirect和这段代码......

add_action( 'admin_menu' , 'admin_menu_new_items' );

function admin_menu_new_items() {
    wp_redirect( home_url() );
    exit;
}

这给了我一个Headers已发送的错误,有人可以建议我哪里出错吗?

3 个答案:

答案 0 :(得分:0)

如果我理解正确,您不需要重定向。不要在函数add_menu_page中使用$menu_slug,而是放置目标页面的地址,例如:

$the_post_title = 'The Portfolio';

add_action( 'admin_menu', 'wpse_59050_add_menu' );

function wpse_59050_add_menu() 
{
    global $the_post_title;
    $our_page = get_page_by_title( $the_post_title );

    $settings_page = add_menu_page( 
        'Edit '.$our_page->post_title, 
        'Edit '.$our_page->post_title, 
        'add_users', 
        '/post.php?post='.$our_page->ID.'&action=edit', 
        '', 
        '', 
        2
    );
}

此功能来自以下WordPress答案:Highlighting a Menu Item by Post Name。你需要一些jQuery来正确突出这个顶级菜单,检查那个Q中的my和TheDeadMedic答案。

另一个也很有用:Add highlighting to new Admin Dashboard Menu Item

答案 1 :(得分:0)

我找到了一个不使用JS / JQ的两步解决方案。

第1步:
在脚本顶部附近,放置以下PHP以显示隐藏第一页的CSS:

add_action('admin_head', 'hide_my_first_page');

function hide_my_first_page(){
    echo '<style>
        a[href="admin.php?page=admin_menu_slug"] + ul > li.wp-first-item{
            display: none;
        }
    </style>';
}

admin_menu_slug是传递给add_menu_page();的第四个参数。

第2步:
获取您要运行的页面的功能,并将其作为add_menu_page();

中的第5个参数传递

答案 2 :(得分:0)

最近为pootle page builder做了这个,而这个AFAIK是最好的方式,

/**
 * Redirecting from Page Builder > Add New page
 * @since 0.1.0
 */
function add_new() {
    global $pagenow;

    if ( 'admin.php' == $pagenow && 'page_builder_add' == filter_input( INPUT_GET, 'page' ) ) {
        header( 'Location: ' . admin_url( 'whatever-page.php' ) );
        die();
    }
}
add_action( 'admin_init', 'add_new' );

page_builder_add替换为您的页面slug,将admin_url( 'whatever-page.php' )替换为您想要重定向到的网址。

我们总是使用scrutinizer-ci来获得最佳代码实践并保持代码分数大于9.5 / 10,因此所有代码(包括此代码)都是安全和优化的;)

Lemme知道它是如何起作用的。

干杯