在导航菜单中添加要锚定的不同类

时间:2013-07-28 作者:Johan

这可能吗?

我想向锚点添加不同的类,所以在所有锚点上都不一样。我该怎么做?

PS:我正在使用这个:

function add_nav_class($output) {
    $output= preg_replace(\'/<a/\', \'<a class="your-class"\', $output, 1);
    return $output;
}
add_filter(\'wp_nav_menu\', \'add_nav_class\');
但我想在链接中添加不同的类。。。

就像这样:

<li><a class="1></a></li>
<li><a class="2></a></li>
等等。。。

3 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

是的,这是可能的。

您可以使用wp_nav_menu_objects 滤器

function my_wp_nav_menu_objects($objects, $args) {
    foreach($objects as $key => $item) {
        $objects[$key]->classes[] = \'my-class\';
    }
    return $objects;
}
add_filter(\'wp_nav_menu_objects\', \'my_wp_nav_menu_objects\', 10, 2);
唯一的问题是这些类将被添加到li 元素,而不是直接链接。但这是默认的WordPress行为,我认为你不应该改变它。

如果您真的必须更改它,仍然有可能:

function my_walker_nav_menu_start_el($item_output, $item, $depth, $args) {
    // you can put your if statements in here (use item, depth and args in conditions)
    if ( $depth == 1 ) {
        $item_output = preg_replace(\'/<a /\', \'<a class="level-1-menu" \', $item_output, 1);
    } else if ( $depth == 2 )
        $item_output = preg_replace(\'/<a /\', \'<a class="level-2-menu" \', $item_output, 1);
    }
    // .. and so on
    return $item_output;
}
add_filter(\'walker_nav_menu_start_el\', \'my_walker_nav_menu_start_el\', 10, 4);

SO网友:Hardy Mathew

您可以按照以下步骤操作:

步骤1:在wp admin中,转到外观->菜单,将类放在菜单项“CSS类(可选)”中。如果在菜单项中看不到“CSS类(可选)”,则在屏幕右上方有“屏幕选项”,在“显示高级菜单属性”下有“CSS类”选项。

步骤2:在您的Theme文件夹/功能下。php添加以下代码:

function my_walker_nav_menu_start_el($item_output, $item, $depth, $args) {
    $classes     = implode(\' \', $item->classes);
    $item_output = preg_replace(\'/<a /\', \'<a class="\'.$classes.\'"\', $item_output, 1);
    return $item_output;
 }
add_filter(\'walker_nav_menu_start_el\', \'my_walker_nav_menu_start_el\', 10, 4);
希望以上代码对您有用,如果仍然不起作用,请告诉我。

SO网友:Vasanthi


function my_walker_nav_menu_start_el($item_output, $item, $depth, $args) {

    if (in_array(\'current-menu-item\', $item->classes) ){
    $classes[\'class\'] = \'active \';
    }
    $item_output = preg_replace(\'/<a /\', \'<a class="\'.$classes[\'class\'].\'"\', $item_output, 1);
    return $item_output;

 }
add_filter(\'walker_nav_menu_start_el\', \'my_walker_nav_menu_start_el\', 10, 4);

结束

相关推荐

Wordpress Flyout Menus

我有一个有点复杂的菜单结构,我正试图找出最好的方法来做到这一点。I have a top nav 它有4个部分。每个部分最多有2层深。而且I have a SUB Nav 这是基于您所在的部分,并显示为向下钻取,显示您拥有的页面。例如,假设我单击第二级顶部导航-然后我将转到显示打开并选中该部分的子页面。我希望我的解释是正确的。。。谢谢我的问题是:最好的方法是什么。我研究了一些插件,但似乎找不到合适的插件。我不需要使用插件。