WP_NAV_MENU自定义Walker<a>类

时间:2016-06-30 作者:mmorris1

因此,我正在学习定制步行器,并遇到了一些问题。我有一个定制的助行器。我遇到的一个问题是如何将类添加到<a> start\\u el函数内部。相关代码如下所示:

/**
     * Filter the HTML attributes applied to a menu item\'s anchor element.
     *
     * @since 3.6.0
     * @since 4.1.0 The `$depth` parameter was added.
     *
     * @param array $atts {
     *     The HTML attributes applied to the menu item\'s `<a>` element, empty strings are ignored.
     *
     *     @type string $title  Title attribute.
     *     @type string $target Target attribute.
     *     @type string $rel    The rel attribute.
     *     @type string $href   The href attribute.
     * }
     * @param object $item  The current menu item.
     * @param array  $args  An array of {@see wp_nav_menu()} arguments.
     * @param int    $depth Depth of menu item. Used for padding.
     */
    $atts = apply_filters( \'nav_menu_link_attributes\', $atts, $item, $args, $depth );

    $attributes = \'\';
    foreach ( $atts as $attr => $value ) {
        if ( ! empty( $value ) ) {
            $value = ( \'href\' === $attr ) ? esc_url( $value ) : esc_attr( $value );
            $attributes .= \' \' . $attr . \'="\' . $value . \'"\';
        }
    }

    /** This filter is documented in wp-includes/post-template.php */
    $title = apply_filters( \'the_title\', $item->title, $item->ID );

    /**
     * Filter a menu item\'s title.
     *
     * @since 4.4.0
     *
     * @param string $title The menu item\'s title.
     * @param object $item  The current menu item.
     * @param array  $args  An array of {@see wp_nav_menu()} arguments.
     * @param int    $depth Depth of menu item. Used for padding.
     */
    $title = apply_filters( \'nav_menu_item_title\', $title, $item, $args, $depth );

    $item_output = $args->before;
    $item_output .= \'<a\'. $attributes .\'>\';
    $item_output .= $args->link_before . $title . $args->link_after;
    $item_output .= \'</a>\';
    $item_output .= $args->after;
我觉得这样做的方法是通过传递带有$item\\u输出的新类,但我还没有找到如何做到这一点(代码是什么样子的)。

有什么想法吗?

1 个回复
SO网友:czerspalace

您可以尝试更改$attributes 字符串,因为它输出a 标签以下内容未经测试:

$myClass = \'some-custom-class\';
$myClassAdded = false;
$attributes = \'\';
foreach ( $atts as $attr => $value ) {
    if ( ! empty( $value ) ) {
        $value = ( \'href\' === $attr ) ? esc_url( $value ) : esc_attr( $value );
        if( $attr == \'class\' ){
            $value .= \' \' . $myClass;
            $myClassAdded = true;
        }
        $attributes .= \' \' . $attr . \'="\' . $value . \'"\';
    }
}
if( !$myClassAdded ){
     $attributes .= \' class="\' . $myClass . \'"\';
}
我还添加了一个额外的布尔值,以防在循环中找不到class属性。

相关推荐

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

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