wp_nav_menu过滤,删除特定链接

时间:2016-04-01 10:43:15

标签: php regex wordpress preg-replace

我试图从wordpress菜单中删除特定链接:

<li class="ubermenu-item ubermenu-item-type-post_type ubermenu-item-object-page ubermenu-item-1 ubermenu-item-level-0 ubermenu-column ubermenu-column-auto" ><a class="ubermenu-target ubermenu-item-layout-default ubermenu-item-layout-text_only" href="/first/" tabindex="0"><span class="ubermenu-target-title ubermenu-target-text">First</span></a></li>

<li class="ubermenu-item ubermenu-item-type-post_type ubermenu-item-object-page ubermenu-item-2 ubermenu-item-level-0 ubermenu-column ubermenu-column-auto" ><a class="ubermenu-target ubermenu-item-layout-default ubermenu-item-layout-text_only" href="/second/" tabindex="0"><span class="ubermenu-target-title ubermenu-target-text">Second</span></a></li>

<li class="ubermenu-item ubermenu-item-type-post_type ubermenu-item-object-page ubermenu-item-3 ubermenu-item-level-0 ubermenu-column ubermenu-column-auto" ><a class="ubermenu-target ubermenu-item-layout-default ubermenu-item-layout-text_only" href="/third/" tabindex="0"><span class="ubermenu-target-title ubermenu-target-text">Third</span></a></li>


function remove_link( $menu ) {
    return str_replace( '<a href="', '<a>', $menu );
}
add_filter( 'wp_nav_menu', 'remove_link' );

我尝试删除的链接.ubermenu-item-3附加了li元素。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

您应该使用wp_nav_menu_objects filter代替。没有必要使用潜在的杂乱字符串替换或DOM解析,因为您可以在生成标记之前过滤菜单项数组。

以下是http://hookr.io/filters/wp_nav_menu_objects/

中的一些框架代码
// define the wp_nav_menu_objects callback 
function filter_wp_nav_menu_objects( $sorted_menu_items, $args ) { 
    // make filter magic happen here... 
    return $sorted_menu_items; 
}; 

// add the filter 
add_filter( 'wp_nav_menu_objects', 'filter_wp_nav_menu_objects', 10, 2 ); 

只需取消设置数组中的相应索引。

或者,只需使用专为此目的而设计的UberMenu条件扩展。 http://wpmegamenu.com/conditionals

答案 1 :(得分:0)

如果要排除某个页面,请尝试以下操作:


function exclude_menu_for_visitors($exclude_array){
    $page_id = 1; //id of page you want to exclude
    $exclude_array[]= $page_id;
    return $exclude_array;
}

add_filter('wp_list_pages_excludes', 'exclude_menu_for_visitors');