如何挂钩并编辑wp_NAV_MENU<a>标记的文本?

时间:2018-06-04 作者:Ruke

我正在尝试更改中为锚定标记显示的文本wp_nav_menu 李的。

实际上,我用jQuery做到了这一点,没有什么特别之处,因为我当然不是专业人士。您可以在此处看到基本代码:

jQuery(document).ready(function () {

    jQuery(\'.menu-item-30 > a\').html(\'<i class="fas fa-home"></i>\');

});
它可以工作,此代码将在所需的导航菜单li中找到锚定标记,并将图标更改为主页的一个小房子。问题是,当我加载页面时,在加载房屋之前的最短一秒钟,我可以看到锚定标签中的原始文本,即“主页”,它看起来不专业。我想说的是,页面加载了,然后这段代码明显地在后面运行。

因此,我认为这可能是过滤器和挂钩发挥作用的地方。然而,据我所知,您不能用PHP包装jQuery并将其设置为过滤器,对吗?也许我只需要将jQuery中的“ready”改为其他内容。

因此,如何在两者之间更改文本<a></a> 从“家”到<i class="fas fa-home"></i> 同时,让它在页面加载时加载,而不是在页面加载后加载?

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

实现这种效果的一种方法是wp_nav_menu_objects

function modify_home_in_nav_menu_objects( $items, $args ) {
    foreach ( $items as $k => $object ) {
        // you can also target given page using this if:
        // if ( \'page\' == $object->object && 2 == $object->object_id ) {
        if ( 30 == $object->ID ) {
            $object->title = \'<i class="fas fa-home"></i>\';
        }
    }
    return $items;
}
add_filter( \'wp_nav_menu_objects\', \'modify_home_in_nav_menu_objects\', 10, 2 );
附:真的应该吗fas 而不是fa 在那里?

结束