5

我已经使用 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 already sent 错误,任何人都可以建议我哪里出错了吗?

4

3 回答 3

2

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

$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 来正确突出显示此顶级菜单,检查我和 TheDeadMedic 在那个 Q 中的答案。

这另一个也很有用:向新的 Admin Dashboard Menu Item 添加突出显示

于 2013-03-13T13:44:14.757 回答
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_slug4 个参数传递给add_menu_page();.

第 2 步:
获取要运行的页面的函数并将其作为第 5 个参数传递add_menu_page();

于 2013-08-13T18:43:07.643 回答
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' )您想要重定向到的 url。

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

让我知道它是如何为你工作的。

干杯

于 2015-10-14T05:00:23.160 回答