在使用内置菜单函数wp_NAV_MENU()的同时,在菜单元素之前插入PHP

时间:2019-03-21 作者:Jason Is My Name

这个词很难说,所以请容忍我。

我已经生成了一个wp\\u nav\\u菜单,menu-1,作为主菜单。

与基本的b****菜单相比,菜单相当复杂。您可以根据用户是否登录显示和隐藏零件。

因此,其中一个导航元素仅在用户登录时显示。它会将“Hi NAME”作为导航项显示。

我的任务是将用户头像放在这之前。然而,为了获得用户化身,我需要使用另一个WP函数get\\u avatar()。我在后端的菜单部分看不到可以为特定导航输入代码的区域。我也不能在标题中告诉它wp\\u nav\\u menu()函数的位置。

我知道如何获得用户的头像。我知道如何按照我的意愿来设计它。我不知道如何告诉它该放在哪里/我把代码放在哪里。。。

你们知道怎么做吗?

以下是我创建导航的代码:

<?php
    wp_nav_menu( array(
    \'theme_location\' => \'menu-1\',
    \'menu_id\'        => \'main-menu\',
    \'container\'      => \'\',
    ) );
?>
这是输出的代码:

<div id="menu" class="collapse display-none lg:block width-100 lg:width-auto text-right">
    <ul class="list-reset mt0 mb0 lg:flex">
        <li class="border-top border-darken-1 lg:border-none">
            <a class="block py1 px2 lg:px1 sm:h3 bold blue hover:dark-blue">Product Categories</a>
            <ul class="sub-menu">
                <li class="border-top border-darken-1 lg:border-none"><a href="/" class="block py1 px2 lg:px1 sm:h3 bold blue hover:dark-blue">Metals</a></li>
                <li class="border-top border-darken-1 lg:border-none"><a href="/" class="block py1 px2 lg:px1 sm:h3 bold blue hover:dark-blue">Polymers</a></li>
                <li class="border-top border-darken-1 lg:border-none"><a href="/" class="block py1 px2 lg:px1 sm:h3 bold blue hover:dark-blue">Ceramics</a></li>
                <li class="border-top border-darken-1 lg:border-none"><a href="/" class="block py1 px2 lg:px1 sm:h3 bold blue hover:dark-blue">Alloys</a></li>
                <li class="border-top border-darken-1 lg:border-none"><a href="/" class="block py1 px2 lg:px1 sm:h3 bold blue hover:dark-blue">Composites</a></li>
            </ul>
        </li>
        <li class="border-top border-darken-1 lg:border-none"><a href="/" class="block py1 px2 lg:px1 sm:h3 bold blue hover:dark-blue">Designer Spotlight</a></li>
        <li class="border-top border-darken-1 lg:border-none"><a href="/" class="block py1 px2 lg:px1 sm:h3 bold blue hover:dark-blue">My Boards</a></li>
        <li class="border-top border-darken-1 lg:border-none"><a href="/" class="block py1 px2 lg:px1 sm:h3 bold blue hover:dark-blue">Hi Jason</a></li>
    </ul>
</div>
如果我在css中执行此操作,并且只有一个资产可以放置在那里:

#menu a[href$=\'/my-account/\']:before {
    content: \'\';
    width: 30px;
    height: 30px;
    margin-right: 10px;
    display: inline-block;
    background-image: url(https://www.catster.com/wp-content/uploads/2018/06/bringing-home-kitty-mouth-open-wide.jpg)
}
但是我需要使用这个获取用户头像的代码(未经测试-也许我也需要这段代码的帮助):

function get_current_user_id() {
    if ( ! function_exists( \'wp_get_current_user\' ) ) {
        return 0;
    }
    $user = wp_get_current_user();
    return ( isset( $user->ID ) ? (int) $user->ID : 0 );
    $avatar_image = get_avatar($user);
}
希望你能理解/帮助?

谢谢,杰森。

EDIT: 只是为了重新打开它,答案中的“正确答案”理论是正确的,但我实际上没有从函数中返回化身:

<?php 
function get_current_user_avatar_url() {
    if ( ! function_exists( \'wp_get_current_user_id\' ) ) {
        return false;
    }

    $user = wp_get_current_user_id();
    return get_avatar_url($user);
} 

$avatarURL = get_current_user_avatar_url(); ?>

<?php if ($avatarURL != \'\') : ?>

    <style>
        #menu a[href$=\'/my-account/\']:before {
            content: \'\';
            width: 30px;
            height: 30px;
            margin-right: 10px;
            display: inline-block;
            background-image: url(<?php if ($avatarURL != \'\') : ?><?php echo $avatarURL; ?><?php endif; ?>);
        }
    </style>
现在我知道在代码中的什么地方以及如何使用它了,请有人帮我把这个代码片段处理好吗?

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

最简单的方法是在php模板中内联一些CSS。然后,您可以用用户的头像替换硬编码的图像URL,如background-image: url("\' . echo $avatarURL . ");

不过,您肯定需要修复代码片段才能获得头像。当前,您正在返回用户ID,然后尝试获取头像。return语句之后的任何内容都是无法访问的代码。

function get_current_user_avatar_url() {
    if ( ! function_exists( \'get_current_user_id\' ) ) {
        return false;
    }
    $user = get_current_user_id();

    return get_avatar_url($user);
}
然后定义$avatarURL 喜欢$avatarURL = get_current_user_avatar_url();

否则,您将编写一个定制的导航助行器,这要复杂得多。

相关推荐

Reducing Database Query Time

在这里寻找一些建议。有一位客户已经在WooCommerce上工作了大约一年半。我们为他们建了一个新网站。他们开始增加一条新的家具生产线。每个项目有700-800个产品变体组合。由于从生产线中添加了大约8个新产品,当您在管理中查看产品列表时,加载需要花费很长时间。如果您快速编辑一个产品,并说将其添加到第二个类别,然后单击“更新”,则完成查询平均需要10.2-10.8秒(根据查询监视器)。意识到有700-800个变体需要迭代,如果可以理解的话,可能需要更长的时间。我已经恢复到2017主题,禁用了除woocom