サポート » 使い方全般 » デフォルトアバター(ミステリーマン)が表示されない

  • 解決済 yuzunon

    (@yuzunon)


    Avatar Manager」というプラグインでオリジナルのアバターを設定して、
    下記をfunctions.phpに追加してアバターのURLを取得するようにしています。

    function get_avatar_onlyurl($id_or_email, $size = null, $default = null, $alt = null)
    {
      $image = get_avatar($id_or_email, $size);
      if (preg_match('/src="(.*?)"/', $image, $match)) {
    
        if (isset($match[1])) {
          return $match[1];
        } else {
          return false;
        }
      } else {
        return false;
      }
    }

    オリジナルのアバターが無い場合、デフォルトアバター(ミステリーマン)が表示されないのですが、どうしたら表示されるようになるでしょうか?
    ご教示お願いします。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • アバターをお持ちでない場合はサイズ指定がNULLになっていませんか?
    最低サイズを決めてデフォルト値を代入するようにしてみてはいかがでしょうか。

    トピック投稿者 yuzunon

    (@yuzunon)

    msioさん、ご返答ありがとうございます。

    1行目の
    $size = null

    $size = 100
    にするということでしょうか?

    やってみたのですが、アバターのURLが何も出力されませんでした。

    ちなみに、下記のコードで出力しています。
    echo get_avatar_onlyurl( $post->post_author , 100 );

    オリジナルのアバター(管理画面からアップロードした画像)がある場合は

    preg_match('/src="(.*?)"/', $image, $match)
    

    でマッチしますが、ない場合(ミステリーマンなど Gravatar サービスが提供する画像)はクォート文字が異なるのでマッチしません。
    参考ページ: http://weble.org/2012/04/20/wordpress-get-avatar-url

    2通りのパターンに対応させるため、例えば以下のコードになると思います。

    function get_avatar_onlyurl( $id_or_email, $size = null, $default = null, $alt = null )
    {
      $image = get_avatar( $id_or_email, $size );
      if ( preg_match( '/src="(.*?)"/', $image, $match ) && isset( $match[1] ) ) {
        return $match[1];
      }
      if ( preg_match( "/src='(.*?)'/", $image, $match ) && isset( $match[1] ) ) {
        return $match[1];
      }
      return false;
    }
    
    • この返信は7年、 1ヶ月前にgblsmが編集しました。

    すみませんでした。確認いたしました。
    数値はべつにNullで大丈夫のようです。

    アバター取得からURLの抽出につかっている正規表現が問題みたいです。
    取得したmatchをvar_dumpで内容を確認してみてください。
    srcの指定がシングルクォーツで囲まれているので検索に合致しないためURLが取得できないようです。
    かこみのクォーツは指定がばらけていることがあるのでどちらでも取得するようにするととれると思います。
    ただJavascriptと混合でつかっていて難解な場合はへんな動きをするかもしれません。

    preg_match('/src=[\"|\'](.*?)[\"|\']/', $image, $match)
    正規表現なのでクォーツは円マークでエスケープしてあげてください。

    @gblsm さんが先に回答をしめされていました。
    失礼いたしました。

    • この返信は7年、 1ヶ月前にmsioが編集しました。
    トピック投稿者 yuzunon

    (@yuzunon)

    gblsmさん、msioさん、ありがとうございます!

    お二方のコードどちらでも表示出来ました。

    クォート文字の違いで抽出されなかったんですね。
    理由が分かってスッキリしました。
    ありがとうございました!

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「デフォルトアバター(ミステリーマン)が表示されない」には新たに返信することはできません。