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

移除WordPress菜单中特定类菜单项的<a>标签

问题

需要移除WordPress菜单中带有remove-link类的菜单项内的全部<a>标签。

示例输入:

<ul>
  <li><a href="whatever">Whatever</li>
  <li class="remove-link"><a href="whatever">Whatever</a></li>
  <li><a href="whatever">Whatever</li>
<ul>

期望输出:

<ul>
  <li><a href="whatever">Whatever</li>
  <li class="remove-link"></li>
  <li><a href="whatever">Whatever</li>
</ul>

当前代码只能移除固定内容的链接,没办法根据class筛选目标菜单项:

function remove_links( $menu ) {
    return str_replace( '<a href="whatever">Whatever</a>', '', $menu );
}
add_filter( 'wp_nav_menu_items', 'remove_links' );
解决方案

用DOM文档解析的方式处理,能精准定位目标菜单项,适配任意内容的链接,不会误操作其他菜单项:

function remove_links_from_specific_menu_items( $menu ) {
    // 初始化DOM解析器
    $dom = new DOMDocument();
    // 忽略HTML语法警告,处理WordPress菜单可能的不规范代码
    libxml_use_internal_errors(true);
    // 编码转换确保非ASCII字符正常显示
    $dom->loadHTML( mb_convert_encoding( $menu, 'HTML-ENTITIES', 'UTF-8' ) );
    libxml_clear_errors();

    // 用XPath定位所有带remove-link类的li元素
    $xpath = new DOMXPath( $dom );
    $targetItems = $xpath->query( '//li[contains(@class, "remove-link")]' );

    if ( $targetItems->length > 0 ) {
        foreach ( $targetItems as $item ) {
            // 移除当前li下的所有a标签,倒序删除避免索引混乱
            $links = $item->getElementsByTagName( 'a' );
            for ( $i = $links->length - 1; $i >= 0; $i-- ) {
                $link = $links->item( $i );
                $link->parentNode->removeChild( $link );
            }
        }
    }

    // 提取处理后的内容,去掉自动添加的body标签
    $processedMenu = $dom->saveHTML( $dom->getElementsByTagName('body')->item(0) );
    return str_replace( array('<body>', '</body>'), '', $processedMenu );
}
add_filter( 'wp_nav_menu_items', 'remove_links_from_specific_menu_items' );

说明

  • 之前的str_replace属于硬匹配固定文本,一旦链接内容变化就失效,而且无法区分是否是目标类的菜单项,实用性极低。
  • 用DOMDocument+DOMXPath的方式,能精准找到带有remove-link类的菜单项,再移除其内部的链接,不管链接的href和文本是什么都能处理,适配所有场景。
  • 加入编码转换和错误忽略,避免WordPress菜单的特殊字符或不规范HTML导致解析失败。

内容的提问来源于stack exchange,提问作者Junky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:06:26