web-dev-qa-db-ja.com

Get_avatarカスタム "クラス"の$ argsを復元する方法?

カスタムCSSクラス名を使ってアバターに渡すことができることを私は知っています...

<?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') ) );

しかし、私はGravatarをMedia Libraryイメージに置き換えるためにget_avatarをフィルタリングしています、そしてコードは$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

誰かがpluggable.phpを見てそこにあるget_avatarの部分から関連するコードをコピーすることを勧めましたが、私は理解しません。

アバターにカスタムクラスを追加し続けるために$args機能を復元するにはどうすればよいですか。

1
Robert Andrews

ドキュメント teh get_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で指定された数の引数のみを渡すためです。 ドキュメント :を参照してください。

$ acceptable_args

(整数)(オプション)

関数が受け付ける引数の数デフォルト値:1

これは基本的に、add_filter()の呼び出しで56に変更する必要があると言う長い意味での言い方です。

add_filter('get_avatar', 'tsm_acf_profile_avatar', 10, 6);
2
Jacob Peattie