在header.php文件中使用在函数.php文件中编写的函数

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

我被要求在一个网站上做一些工作,在这个网站上,老开发人员已经将这个函数(创建一个变量,将用户的头像存储到img标签中)写入到函数中。php:

add_filter(\'get_avatar\', \'lb_acf_profile_avatar\', 10, 5);
function lb_acf_profile_avatar($avatar, $id_or_email, $size, $default, $alt) {

    $user = \'\';
// Get user by id or email
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_user_by(\'id\', $id);
    } elseif (is_object($id_or_email)) {
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_user_by(\'id\', $id);
        }
    } else {
        $user = get_user_by(\'email\', $id_or_email);
    }
    if (!$user) {
        return $avatar;
    }
// Get the user id
    $user_id = $user->ID;
    //$user_info = get_userdata($user_id)
    // Get the file id
    $avatar_url = $user->get(\'user_url\'); //\'https://dojo.nearsoft.com/wp-content/uploads/2017/02/Eric-Wroolie-per-template.jpg\';
    if ($avatar_url == \'\') {
        return $avatar;
    }
    $avatar = \'<img alt="\' . $alt . \'" src="\' . $avatar_url . \'" class="avatar avatar-\' . $size . \'" height="\' . $size . \'" width="\' . $size . \'"/>\';
// Return our new avatar
    return $avatar;
}
我知道这个功能可以工作,因为他构建的应用程序使用代码为每个用户生成化身。我只是不知道如何使用它,也无法联系到他来帮助我使用它。

到目前为止,我的努力都失败了,使用的代码有点像这样:

<?php lb_acf_profile_avatar() ?>
<?php if ($avatar != \'\') : ?>
    <div>Hellow World</div>
<?php endif; ?>
在这里,我尝试调用函数,然后假设返回的变量(化身图像)从此点起可用。事实似乎并非如此。

对于每个参数,错误消息为其中的5条:

Warning: Missing argument 5 for lb_acf_profile_avatar(), called in /home/materialshub/public_html/development/wp-content/themes/bolt/header.php on line 238 and defined in /home/materialshub/public_html/development/wp-content/themes/bolt/functions.php on line 663 

Is there a way to tailor this so I get the avatar_url without the img tag returned, but I need the original code to function as it should as it is also used in the app and is functioning correctly.

我没有访问该应用程序的权限。或者老开发人员。你能提供的任何帮助都是很好的。如果你想了解更多信息,请告诉我。

I think I want a new function that gets the avatar_url like the function above but without any of the img tag. A simple url is all I need.

我需要这是动态的,所以它可以为所有用户自动工作,生成avatar\\u url。我怎样才能在这个庄园里传递论点?

I cannot just use the inbuilt get_avatar() WordPress function before we try go down that route as the app has made use of an empty field in the database \'user_url\'.

我很感激这是一个很烦人的问题,但我很感激你的好意。

EDIT: 我已尝试还原回get\\u avatar()函数,然后返回此警告:

Warning: Missing argument 1 for get_avatar(), called in /home/materialshub/public_html/development/wp-content/themes/bolt/header.php on line 239 and defined in /home/materialshub/public_html/development/wp-includes/pluggable.php on line 2450
谢谢,杰森。

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

正如评论中所讨论的,实际上您只需要URL。下面是修改为get_avatar_url 改为挂钩:

add_filter(\'get_avatar_url\', \'lb_acf_profile_avatar_url\', 10, 5);
function lb_acf_profile_avatar_url($url, $id_or_email, $args) {
    $user = \'\';
    // Get user by id or email
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_user_by(\'id\', $id);
    } elseif (is_object($id_or_email)) {
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_user_by(\'id\', $id);
        }
    } else {
        $user = get_user_by(\'email\', $id_or_email);
    }
    if (!$user) {
        return $url;
    }

    $avatar_url = $user->get(\'user_url\');
    if ($avatar_url == \'\') {
        return $url;
    }
    return $avatar_url;
}
未经测试,抱歉。它使用与现有代码相同的逻辑将$id\\u或\\u email参数解析为用户对象:这里可能有一些改进的空间,例如,由于$id\\u或\\u email可能已经是用户对象,我对空字符串检查有点紧张,但现有(可能正在工作)代码就是这样做的。

然后你可以打电话给WordPressget_avatar_url 具有用户ID,并应在可用的情况下返回user\\u url。我希望get\\u avatar也能使用这个过滤器。

SO网友:Krzysiek Dróżdż

您试图在没有任何参数的情况下调用此自定义函数:

lb_acf_profile_avatar()
但这并不意味着要像那样工作。这不是一个你应该调用的函数。这是一个过滤器回调,必须获得5个参数:

  • $头像,
  • $id\\u或电子邮件,
  • $大小,
  • $默认值,
  • $alt
  • 但是,正如我已经说过的,这个自定义函数是一个过滤器回调。这意味着get_avatar 调用函数时,将运行自定义函数并修改的默认行为get_avatar 作用(它将更改/过滤其结果)

    这意味着您应该调用defaultget_avatar 标题中的函数。

    你仍然需要给它传递一些参数。其中至少有一个:

    您可以这样使用它:

    echo get_avatar( get_current_user_id() ); 
    
    你可以通过size 作为第二个参数。