You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为WordPress菜单项添加复选框实现target="_blank"属性设置

实现WordPress菜单项添加“在新窗口打开”复选框功能

要完成在WordPress后台菜单编辑页给菜单项添加“在新窗口打开”复选框,并在勾选时为对应链接添加target="_blank"属性,需要分两步操作:

一、后台菜单编辑页添加复选框字段

在主题的functions.php文件中添加以下代码,用于在菜单项编辑区域插入复选框,并保存勾选状态:

// 添加菜单项自定义字段
add_action('wp_nav_menu_item_custom_fields', 'add_open_in_new_window_checkbox', 10, 4);
function add_open_in_new_window_checkbox($item_id, $item, $depth, $args) {
    $is_checked = get_post_meta($item_id, '_menu_item_open_in_new_window', true);
    ?>
    <p class="field-open-in-new-window description description-wide">
        <label for="edit-menu-item-open-in-new-window-<?php echo $item_id; ?>">
            <input type="checkbox" id="edit-menu-item-open-in-new-window-<?php echo $item_id; ?>" name="menu-item-open-in-new-window[<?php echo $item_id; ?>]" value="1" <?php checked($is_checked, 1); ?> />
            在新窗口打开链接
        </label>
    </p>
    <?php
}

// 保存菜单项自定义字段值
add_action('save_post', 'save_open_in_new_window_setting');
function save_open_in_new_window_setting($post_id) {
    // 仅处理菜单项类型的帖子
    if (get_post_type($post_id) !== 'nav_menu_item') return;

    if (isset($_POST['menu-item-open-in-new-window'][$post_id])) {
        update_post_meta($post_id, '_menu_item_open_in_new_window', 1);
    } else {
        delete_post_meta($post_id, '_menu_item_open_in_new_window');
    }
}

二、修改菜单Walker类渲染链接属性

修改你现有的description_walker类,在生成<a>标签时,判断该菜单项是否勾选了“在新窗口打开”,如果是则添加target="_blank"和安全属性rel="noopener noreferrer":

<?php wp_nav_menu([
   'theme_location' => 'primary',
   'container'      => '',
   'walker'         => new description_walker(),
]); ?>

class description_walker extends Walker_Nav_Menu
{
    function start_el(&$output, $item, $depth = 0, $args = null, $id = 0)
    {
        $title = trim($item->title);
        $classes = (!empty($item->classes)) ? implode(" ", $item->classes) : '';
        $button = (!empty($item->classes) && in_array('menu-item-has-children',
                $item->classes)) ? '<span class="button-show">+</span>' : '';    
        $output .= "<li class='" . $classes . "'>";
        
        // 获取是否需要在新窗口打开的设置
        $open_in_new = get_post_meta($item->ID, '_menu_item_open_in_new_window', true);
        $link_attrs = '';
        if ($open_in_new) {
            $link_attrs .= ' target="_blank" rel="noopener noreferrer"';
        }
        
        $output .= '<a href="' . $item->url . '"' . $link_attrs . '>';
        $output .= $title;
        $output .= '</a>';
        $output .= $button;
    }
}

这样设置后,在后台编辑菜单时,每个菜单项下方会出现“在新窗口打开链接”的复选框,勾选后前端对应的链接就会在新窗口打开。

内容的提问来源于stack exchange,提问作者s.kuznetsov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 22:07:35