删除除以某些字母开头的菜单类之外的所有导航菜单类

时间:2014-08-30 作者:GermanKiwi

我目前正在使用一个函数,该函数将从导航菜单中删除所有不需要的类,只保留我想要保留的类(函数中数组中列出的类)。看起来是这样的:

function remove_menu_classes($var) {
return is_array($var) ? array_intersect($var, array (
    // List of allowed menu classes
    \'current-menu-item\',
    \'current-menu-ancestor\',
    \'menu-item-has-children\',
    \'current-post-ancestor\',
    \'first\',
    \'last\',
    \'vertical\',
    \'horizontal\'
    )
) : \'\';
}
add_filter( \'nav_menu_css_class\', \'remove_menu_classes\' );
add_filter( \'nav_menu_item_id\', \'remove_menu_classes\' );
add_filter( \'page_css_class\', \'remove_menu_classes\' );
现在,我想使用每个菜单项的“CSS类”字段向我的一些菜单项添加一些额外的类,以便在菜单旁边添加字体很棒的图标。这是通过使用plugin.

我所需要做的就是将(例如)“fa home”添加到CSS Classes字段中,或者添加到我想使用的任何字体Awesome类中。该插件检查以fa- nav中存在的<li> 标签,如果它们存在,插件会添加适当的<i class="fa-whatever"> 标签位于<li> 标记,显示图标。非常方便。

问题是我上面的函数去掉了这些fa- 在插件能够看到这些类并对其进行操作之前,将这些类移出。我已尝试更改函数中“add\\u filter”行的优先级(同时更改为“1”和“999”),但没有帮助。

所以我想知道是否有任何方法可以修改上面的函数,这样它就不会删除任何以fa-. 我不认为我可以在那样的数组中使用通配符,但我对PHP的知识还不足以知道是否有其他方法可以实现这个目标(例如,可能使用完全不同的方法)。尽管如此,我还是希望它尽可能简单,最好不用助行器。:)

有什么想法吗?!

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

array_intersect() 当您需要部分匹配时,这不是一个好的选择。检查每个类,并在删除类之前应用这两个检查。

示例,未测试:

function remove_menu_classes( $classes ) {

    // List of allowed menu classes
    $allowed =  array (
        \'current-menu-item\',
        \'current-menu-ancestor\',
        \'menu-item-has-children\',
        \'current-post-ancestor\',
        \'first\',
        \'last\',
        \'vertical\',
        \'horizontal\'
    );

    if ( ! is_array( $classes ) )
        return $classes;

    foreach ( $classes as $key => $class ) {

        // keep allowed classes
        if ( in_array( $class, $allowed ) )
            continue;

        // keep font awesome classes
        if ( 0 === strpos( $class, \'fa-\' ) )
            continue;

        // remove the rest
        unset ( $classes[ $key ] );
    }

    return $classes;
}

结束

相关推荐

How to create tag.php

如何创建标记。php模板,将适用于每个包含标签的帖子?我创建了一些标签,如=食物、饮料和水果贴子1有食品和饮料标签帖子2有食物和水果标签如何为这些标签帖子创建一个页面?我的代码看起来像这样,但没有显示任何内容。function get_tags_post($tag_name){ $original_query = $wp_query; $wp_query = null; $brand_name= $tag_name; $args=array(