2016-04-01 7 views
0

を取り除く:wp_nav_menuフィルタ、私は私のワードプレスのメニューから特定のリンクを削除しようとしている特定のリンク

<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'); 

私は削除しようとしているリンクはli要素に添付.ubermenu-item-3を持っています。どうすればいいですか?

+0

メニューウォーカーのテーマを確認して削除しますか?または、ubermenuプラグインを削除しますか? –

+0

特定のユーザーのためには削除する必要があります。 – ditto

+0

あなたは削除された親の中のすべてのコンテンツを削除したいのですか? – David

答えて

1

以下の両方のバージョン。コメントを読む!これはdomdocumentに依存しますが、ほとんどのPHPインストールにはそれがありますが、いくつかのカスタムセットアップではありません。

function remove_link($html) { 
    $dom->loadHTML($html); 
    $links= $dom->getElementsByTagName('li'); 

    foreach($links as $data){ 

     if(strpos($data->getAttribute('class'), 'ubermenu-item-3') !== false){ 

      //remove the entire li - comment out if just removing the href 
      $data->parentNode->removeChild($data); 

      //alternatively change the href as per your code (comment out if using remove the entire li) 
      //foreach($data->getElementsByTagName('a') as $as){ 
      // $as->setAttribute('href', ''); 
      //}  
     } 

    } 

    $html= $dom->saveHTML(); 

    return $html; 

} 

add_filter('wp_nav_menu', 'remove_link'); 
1

代わりに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

関連する問題