如何恢复GET_AVALTAL自定义“类”的$args?

时间:2017-11-30 作者:Robert Andrews

我知道你可以通过使用。。。

<?php echo get_avatar( $id_or_email, $size, $default, $alt, $args ); ?>

喜欢

get_avatar( $current_user->user_email, 128, null, null, array(\'class\' => array(\'img-responsive\', \'img-rounded\') ) );

但我正在过滤get_avatar 用媒体库映像替换Gravatar,代码似乎已呈现$args 部分不起作用。

这是我的电话$args 类添加。。。

echo get_avatar($curauth->ID, $size=\'150\', $default=\'\', $alt=$curauth->display_name, $args = array( \'class\' => array( \'rounded-circle\' ) ) );

但这并没有增加任何东西。

这是筛选代码。。。

  /**
   * Use ACF image field as avatar
   * @author Mike Hemberger
   * @link http://thestizmedia.com/acf-pro-simple-local-avatars/
   * @uses ACF Pro image field (tested return value set as Array )
   */
  add_filter(\'get_avatar\', \'tsm_acf_profile_avatar\', 10, 5);
  function tsm_acf_profile_avatar( $avatar, $id_or_email, $size, $default, $alt ) {

       $user = null; // This added by Robert Andrews to overcome "Notice: Undefined variable" for $user

      // Get user by id or email (get_avatar needs to get a user by either id or email, so account for both)
      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;

      // Get the file id
      $image_id = get_user_meta($user_id, \'avatar\', true); // CHANGE TO YOUR FIELD NAME

      // Bail if we don\'t have a local avatar
      if ( ! $image_id ) {
          return $avatar;
      }

      // Get the file size
      $image_url  = wp_get_attachment_image_src( $image_id, \'thumbnail\' ); // Set image size by name
      // Get the file url
      $avatar_url = $image_url[0];
      // Get the img markup
      /* Run through Cloudinary
         cf. http://cloudinary.com/documentation/image_transformations#modify_image_shape_and_style
         crop fill, gravity face, enhance sharpen, 300 wide and tall only to get square image */
      $avatar = \'<img alt="\' . $alt . \'" src="http://res.cloudinary.com/braincloud/image/fetch/w_300,h_300,c_fill,g_face,e_sharpen,b_rgb:ccc/\' . $avatar_url . \'" class="img-fluid avatar avatar-\' . $size . \'" height="\' . $size . \'" width="\' . $size . \'"/>\';

      // Return our new avatar
      return $avatar;
  }
我已尝试添加$args 到函数声明,就像这样。。。

function tsm_acf_profile_avatar( $avatar, $id_or_email, $size, $default, $alt, $args ) {

... 但随后博客页面返回:Warning: Missing argument 6 for tsm_acf_profile_avatar() in /home/path/wp-content/plugins/plugin/my-gravatar-replacement-plugin.php on line 26

有人建议看一下可插拔的。并从get_avatar 分开吧,但我不明白。

如何恢复$args 功能,以便我可以继续添加自定义类到我的头像?

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

如果你看the documentation 对于tehget_avatar() 过滤器,您将看到回调可以接受6个参数:

apply_filters( \'get_avatar\', string $avatar, mixed $id_or_email, int $size, string $default, string $alt, array $args )

这意味着您的回调函数正确地接受了参数,包括第6个参数,$args:

function tsm_acf_profile_avatar( $avatar, $id_or_email, $size, $default, $alt ) {
问题是$args 没有传递到回调函数中。这是因为add_filter() 仅传递上一个参数中指定的参数数,$accepted_args. 看见the documentation:

$accepted_args

(int)(可选)

函数接受的参数数。默认值:1

这基本上是一种冗长的说法,说你需要改变56 在您的add_filter() 电话:

add_filter(\'get_avatar\', \'tsm_acf_profile_avatar\', 10, 6);

结束

相关推荐

Fetching Gravatar

如何获取任何人的gravatar图像?我需要向用户显示gravatar图像上的自定义配置文件页正在制作。到目前为止,我已经集成了Facebook个人资料图片(自动抓取)选项,并且允许用户分配自己的照片(根据自己的意愿)。我需要做的是,如果此人不是来自FB,那么可能应该使用他的电子邮件或其他东西来查看他/她是否有gravatar,如果是,则显示它。我该怎么做?谢谢