WordPress自定义菜单可以添加自定义链接,也就是设置一个自定义的url作为菜单,但是默认个自定义链接打开方式是当前页面跳转,如何给这个链接设置target=’_blank’属性呢?
在WordPress源码中找到可以改变菜单属性的一个filter,位于D:\xampp\htdocs\wp\wp-includes\nav-menu-template.php:
/**
* Filter the sorted list of menu item objects before generating the menu's HTML.
*
* @since 3.1.0
*
* @param array $sorted_menu_items The menu items, sorted by each menu item's menu order.
* @param object $args An object containing wp_nav_menu() arguments.
*/
$sorted_menu_items = apply_filters( 'wp_nav_menu_objects', $sorted_menu_items, $args );
这个filter的名字叫做wp_nav_menu_objects,可以在主题的functions中添加如下代码:
//菜单自定义链接使用target='_blank'
function add_custom_url_target_attr($sorted_menu_items)
{
foreach ( $sorted_menu_items as $menu ) {
if( $menu->type = 'custom' ){
$menu->target = '_blank';
}
}
return $sorted_menu_items;
}
add_filter('wp_nav_menu_objects', 'add_custom_url_target_attr');
通过这个wp_nav_menu_objects的hook(钩子),就实现了新窗口打开这个菜单链接。
其实,我们可以把要往functions.php中添加的函数写到一个自定义插件中,这个插件专门放我们自己的function,这样更改主题也不用管主题的functions.php文件。
在插件目录plugin目录新建一个文件夹叫myfunc,里面新建一个myfun.php文件:
<?php
/**
* @package myfunc
* @version 1.0
*/
//菜单自定义链接使用target='_blank'
function add_custom_url_target_attr($sorted_menu_items)
{
foreach ( $sorted_menu_items as $menu ) {
if( $menu->type = 'custom' ){
$menu->target = '_blank';
}
}
return $sorted_menu_items;
}
add_filter('wp_nav_menu_objects', 'add_custom_url_target_attr');
这样就是一个最简单的插件了,注意myfun.php前面的注释一定要按照这样的格式写,WordPress通过这个注释来识别是不是一个插件的入口,有新的本来需要放入主题functios.php的函数可以放到这个文件后面加。