使用自定义Walker时删除的WordPress类

时间:2016-11-13 作者:Natalie

我正在使用下面的代码,它从wordpress的菜单选项中删除了我的css类。我想知道为什么我不能弄清楚:/我在“屏幕选项”下用wordpress选项添加CSS类,并选中“CSS类”。

谢谢

              <?php
    class MV_Cleaner_Walker_Nav_Menu extends Walker {
        var $tree_type = array( \'post_type\', \'taxonomy\', \'custom\' );
        var $db_fields = array( \'parent\' => \'menu_item_parent\', \'id\' => \'db_id\' );
        function start_lvl(&$output, $depth) {
            $indent = str_repeat("\\t", $depth);
            $output .= "\\n$indent<ul class=\\"sub-menu\\">\\n";
        }
        function end_lvl(&$output, $depth) {
            $indent = str_repeat("\\t", $depth);
            $output .= "$indent</ul>\\n";
        }
        function start_el(&$output, $item, $depth, $args) {
            global $wp_query;
            $indent = ( $depth ) ? str_repeat( "\\t", $depth ) : \'\';
            $class_names = $value = \'\';
            $classes = empty( $item->classes ) ? array() : (array) $item->classes;
            $classes = in_array( \'current-menu-item\', $classes ) ? array( \'current-menu-item\' ) : array();
            $class_names = join( \' \', apply_filters( \'nav_menu_css_class\', array_filter( $classes ), $item, $args ) );
            $class_names = strlen( trim( $class_names ) ) > 0 ? \' class="\' . esc_attr( $class_names ) . \'"\' : \'\';
            $id = apply_filters( \'nav_menu_item_id\', \'\', $item, $args );
            $id = strlen( $id ) ? \' id="\' . esc_attr( $id ) . \'"\' : \'\';
            $output .= $indent . \'<li\' . $id . $value . $class_names .\'>\';
            $attributes  = ! empty( $item->attr_title ) ? \' title="\'  . esc_attr( $item->attr_title ) .\'"\' : \'\';
            $attributes .= ! empty( $item->target )     ? \' target="\' . esc_attr( $item->target     ) .\'"\' : \'\';
            $attributes .= ! empty( $item->xfn )        ? \' rel="\'    . esc_attr( $item->xfn        ) .\'"\' : \'\';
            $attributes .= ! empty( $item->url )        ? \' href="\'   . esc_attr( $item->url        ) .\'"\' : \'\';
            $item_output = $args->before;
            $item_output .= \'<a data-scroll\'. $attributes .\'>\';
            $item_output .= $args->link_before . apply_filters( \'the_title\', $item->title, $item->ID ) . $args->link_after;
            $item_output .= \'</a>\';
            $item_output .= $args->after;
            $output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
        }
        function end_el(&$output, $item, $depth) {
            $output .= "</li>\\n";
        }
    }
    ?>

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

我认为问题是由这条线引起的:

$classes = in_array( \'current-menu-item\', $classes ) ? array( \'current-menu-item\' ) : array(); 
它要么删除除current-menu-item (如果在数组中找到)或删除所有类(否则)。

为什么会有这条线?我认为它适用于不希望添加默认类的情况,除了current-menu-item 对于当前项目,这不是您的情况。所以只要去掉这条线。

相关推荐

用标准的干净文件替换NAV-menus.php文件?

我是一个自学成才的wordpress网站设计师,请原谅我的无知。我为一个客户开发的几个网站最近被一个印尼黑客组织破坏了(很有趣!)。客户端没有更新wordpress安装和其他一些危及安全的事情。遗憾的是,没有网站的清理备份。网络主机给了我一个包含恶意软件扫描结果的文本文件。看起来很多受影响的文件都是导航菜单。网站的php文件。文本文件中显示的扫描结果示例如下:“[主目录]/[网站文件夹名称]/wp includes/nav-menu.php:SL-php-INJECTOR-1-ejw.UNOFFICIAL