是否在新选项卡中打开菜单链接?

时间:2015-10-06 作者:John

我试图在WordPress管理面板的左侧边栏中添加一个顶级菜单。

以下是我目前拥有的代码:

add_action( \'admin_menu\', \'linked_url\' );
function linked_url() {
add_menu_page( \'linked_url\', \'Menu Title\', \'read\', \'my_slug\', \'\', \'dashicons-text\', 1 );
}

add_action( \'admin_menu\' , \'linkedurl_function\' );
function linkedurl_function() {
global $menu;
$menu[1][2] = "https://www.example.com";
}
此代码可以工作并将菜单链接到外部页面(https://www.example.com).

我从这里学会了如何做到这一点:http://www.techedg.com/2014/09/06/5575/a-simple-way-to-add-an-external-link-to-the-wordpress-admin-menu/

但是,我不知道如何在新选项卡中打开外部链接。我宁愿打开一个新的选项卡/窗口,这样人们就不会丢失他们在管理区域已经打开的内容。

有什么我需要更改或添加的吗?还是根本不可能?

3 个回复
SO网友:Robert hue

您可以使用jQuery实现这一点。我们可以在新选项卡/窗口中通过添加target="_blank" 具有URL的链接上的动态属性https://www.example.com. 下面是该函数的示例。

function wpse_my_custom_script() {
    ?>
    <script type="text/javascript">
        jQuery(document).ready( function($) {
            $( "ul#adminmenu a[href$=\'https://www.example.com\']" ).attr( \'target\', \'_blank\' );
        });
    </script>
    <?php
}
add_action( \'admin_head\', \'wpse_my_custom_script\' );
不要忘记在上面的代码中更改URL,否则这将不起作用。

Tested & working!

SO网友:fabian

在元数组中添加菜单项时,只需添加一个;“目标”;类似这样的属性:

$admin_bar->add_menu( array(
    \'id\'    => \'download-plugin\',
    \'title\' => \'Download Plugin\',
    \'href\'  => \'#\',
    \'meta\'  => array(
        \'title\' => __(\'Download Plugin\'),     
        \'target\' => \'_blank\',      
    ),

));
这样,新添加的管理菜单项将在新选项卡中打开。

SO网友:Prasad Nevase

但中没有可用的参数add_menu_page 要在新选项卡中打开外部链接,可以使用jQuery来实现。请参考以下代码:


jQuery( document ).ready(function() {
    jQuery(\'a\').each(function() {
       var a = new RegExp(\'/\' + window.location.host + \'/\');
       if(!a.test(this.href)) {
           jQuery(this).click(function(event) {
               event.preventDefault();
               event.stopPropagation();
               window.open(this.href, \'_blank\');
           });
       }
    });
});
创建名为admin ext url的文件。并将上述代码放入该文件中。然后,在你的主题的功能。php文件放入以下代码:


add_action( \'admin_enqueue_scripts\', \'admin_handle_ext_urls\' );
function admin_handle_ext_urls(){
    wp_enqueue_script( \'ext_urls_handler\', get_stylesheet_directory_uri() . \'/admin-ext-url.js\' );
}
上面的代码将把admin ext url排入队列。js文件仅在管理端。这应该可以解决你的问题。此外,这将适用于管理端的所有外部链接。