我目前正在使用一个函数,该函数将从导航菜单中删除所有不需要的类,只保留我想要保留的类(函数中数组中列出的类)。看起来是这样的:
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的知识还不足以知道是否有其他方法可以实现这个目标(例如,可能使用完全不同的方法)。尽管如此,我还是希望它尽可能简单,最好不用助行器。:)
有什么想法吗?!
最合适的回答,由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;
}