「wp list comments」でアバターを指定する方法
-
get_avatar() 関数に用意されているフィルター get_avatar にフックしてはいかがですか。Codexにサンプルコードが載っています。
Plugin API/Filter Reference/get avatar-
この返信は7年、 7ヶ月前に
gblsmが編集しました。
ありがとうございます。参考にがんばってみます。
ご参考までにフィルターフックの日本語Codexページです。
https://wpdocs.osdn.jp/プラグイン_API/フィルターフック一覧/get_avatar追記:
content-custom.php に入れた gravatarToID() の先頭パラメータは $post->post_author が妥当ではないでしょうか。( global $post; が先に必要かもしれません。)-
この返信は7年、 6ヶ月前に
gblsmが編集しました。
親身になってご回答くださっていつもありがとうございます。
あれからコメント部分のアバターは下記のようにして、名前ごとに変わるようにできました。
【comments.php】に「callback」を付けて、【functions.php】の「mytheme_comment」を呼び出した形です。しかし、記事部分の投稿者アバターが全て一緒になってしまうという症状に悩んでいます。
<!–★–>の部分です。
ちなみにこの部分を「$post->post_author」にすると、アバターのaltとtitileに「1」が入りました。
「$comment->comment_author」のままだとなんの値も入らず空っぽです。
もちろん実際には1でも空っぽでもなく、投稿者名が入ってほしいのですが。どうしたら記事部分の投稿者アバターも名前ごとに変わるようにできるのかについて、何かご指導いただけませんでしょうか…
▼【functions.php】
/*-------------------------------------------*/ /* 投稿者名でアバター生成 /*-------------------------------------------*/ function gravatarToID($id="名無しさん", $size=50, $type="identicon") { $hashid = md5(md5($id)); if ($size > 512) { $size = 512; } $img = "<img src=\""; $img .= "https://www.gravatar.com/avatar/"; $img .= $hashid; $img .= "?d="; $img .= $type; $img .= "&?s="; $img .= $size; $img .= "\" width=\""; $img .= $size; $img .= "\" height=\""; $img .= $size; $img .= "\" alt=\""; $img .= $id; $img .= "\" title=\""; $img .= $id; $img .= "\" class=\"comment-avatar\" />"; echo $img; } /*-------------------------------------------*/ /* コメントフォーム変更 /*-------------------------------------------*/ function mytheme_comment($comment, $args, $depth) { if ( 'div' === $args['style'] ) { $tag = 'div'; $add_below = 'comment'; } else { $tag = 'li'; $add_below = 'div-comment'; } ?> <<?php echo $tag ?> <?php comment_class( empty( $args['has_children'] ) ? '' : 'parent' ) ?> id="comment-<?php comment_ID() ?>"> <?php if ( 'div' != $args['style'] ) : ?> <div id="div-comment-<?php comment_ID() ?>" class="comment-body"> <?php endif; ?> <div class="author_flex"> <!-- アバター --> <div class="author_left"> <?php echo gravatarToID($comment->comment_author, 50, 'identicon'); ?> </div> <div class="author_right"> <!-- 名前 --> <div class="author_name"> <?php printf( __( '%s' ), get_comment_author_link() ); ?> </div> <!-- 日付 --> <div class="author_date"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ); ?>"> <?php /* translators: 1: date, 2: time */ printf( __('%1$s at %2$s'), get_comment_date(), get_comment_time() ); ?></a><?php edit_comment_link( __( '(Edit)' ), ' ', '' ); ?> </div> </div> </div> <!-- 内容 --> <div class="comment-content"> <?php comment_text(); ?> </div> <!-- 返信ボタン --> <div class="reply"> <?php comment_reply_link( array_merge( $args, array( 'add_below' => $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?> </div> <?php if ( 'div' != $args['style'] ) : ?> </div> <?php endif; ?> <?php }▼【comments.php】
<?php if ( have_comments() ) : ?> <ol class="comment-list"> <?php wp_list_comments( array( 'style' => 'ol', 'max_depth' => '2', 'callback' => 'mytheme_comment', 'per_page' => '100', 'reply_text' => 'コメント <i class="fa fa-comment"></i>', 'short_ping' => true, 'reverse_top_level' => true, 'reverse_children' => true ) ); ?> </ol><!-- .comment-list --> <?php endif; // Check for have_comments(). ?>▼【content-custom.php】
<div class="author_flex"> <div class="author_left"> <!--★--> <?php gravatarToID($comment->comment_author, 50, 'identicon'); ?> </div> <div class="author_right"> <div class="author_name"><?php echo esc_html( $post->txt_name ); ?></div> <div class="author_date"><?php the_time('Y/m/d g:i A') ;?></div> </div> </div>-
この返信は7年、 6ヶ月前に
meijinochocoが編集しました。
-
この返信は7年、 6ヶ月前に
meijinochocoが編集しました。
content-custom.php に入れた gravatarToID() の先頭パラメータは
いま$comment->comment_authorが指定されていますが、これは何を表していますか?
(どこからかコピペしたコードですか?)もしかすると
$post->post_authorが妥当ではないでしょうか。
(これより前の部分にglobal $post;が必要かもしれません。)はい。こちらからコピペしたものです。
https://webbingstudio.com/weblog/cms/entry-113.htmlその部分を「$post->post_author」にすると、アバター画像のaltとtitileに「1」が入りました。ただし、アバター画像は変化なしで、どんな投稿者名でも同じアバター画像が出力されてしまうのです。「global $post;$post->post_author」としても同様です。
-
この返信は7年、 6ヶ月前に
meijinochocoが編集しました。
-
この返信は7年、 6ヶ月前に
meijinochocoが編集しました。
-
この返信は7年、 6ヶ月前に
meijinochocoが編集しました。
-
この返信は7年、 6ヶ月前に
meijinochocoが編集しました。
ごめんなさい、見落としていました。
ちなみにこの部分を「$post->post_author」にすると、アバターのaltとtitileに「1」が入りました。
「$comment->comment_author」のままだとなんの値も入らず空っぽです。
もちろん実際には1でも空っぽでもなく、投稿者名が入ってほしいのですが。WordPress の仕様で comment_author にコメント投稿者の名前が入ります。
同じく仕様で post_author には投稿者のID(番号)が入ります。
ですから post_author を利用して、投稿者名を取得する必要があります。$user = get_userdata( $post->post_author ); // 下記のどれか必要なものをご自身で選んで使います // $user->user_login : ログイン時のユーザー名 // $user->display_name : ブログ上の表示名 // $user->user_nicename : URLフレンドリーなユーザー名(ニックネームではありません)なるほどなるほど。そのような仕様が理由でしたか。お聞きしなければ絶対にわかりませんでした。ありがとうございます。少しわかってきました。
さて、次のようにしたところ「私の名前」がaltやtitleに入るようになりました。
<div class="author_left"> <?php $user = get_userdata( $post->post_author ); gravatarToID($user->display_name, 50, 'identicon'); ?> </div>ただ、ユーザーが投稿する記事なので「ユーザーが入力した名前」がaltやtitleには入ってほしいと思いっております。つまり、
// 下記のどれか必要なものをご自身で選んで使います // $user->xxx_xxxx : WP user frontedでユーザーが入力した名前という感じのものはありませんでしょうか?
(ないですよね、そんな都合のよいものは…)尚、名前の入力はカスタムフィールド名「txt_name」に入っています。
下記の参考リンクにある「カスタムフィールド追加時の注意点」という副題で記載されているMeta Keyとして設定したのが「txt_name」です。※WP user fontedというのはユーザーが記事を投稿できるようになるプラグインです。
参考:https://website-homepage.com/wordpress/plugin/useful/user-frontend/#iできました。めっっっっちゃうれしいです。
<div class="author_left"> <?php $user = get_userdata( $post->post_author ); gravatarToID($post->txt_name, 50, 'identicon'); ?> </div>仕様をご説明いただいたからこそ、じゃあここに
$post->txt_nameって書けばいいのかな、と意味がわかりました。m(_ _)mなんどもなんどもご返信頂き本当にどうもありがとうございます!
心から感謝申し上げます。-
この返信は7年、 6ヶ月前に
meijinochocoが編集しました。
-
この返信は7年、 7ヶ月前に
トピック「「wp list comments」でアバターを指定する方法」には新たに返信することはできません。
(@meijinochoco)
7年、 7ヶ月前
コメントのアバターを投稿者名で変更したいのですが、次のコードを書いても同じアバターしか出力してくれず困っています。
▼【functions.php】
→「gravatarToID」を作る
▼【content-custom.php】
→「gravatarToID」を書いて記事投稿者のアバターを出力したいけどできない。
さらに、返信部分は次のコードなのですが、「wp list comments」にはアバターを指定する方法がないようで、上の【content-custom.php】のように「gravatarToID」を書くことができません。
▼【comments.php】
→記事へのコメント者や返信者のアバターを出力したいけど「gravatarToID」を指定する方法がない。
どうしたらうまいことできるか、ご存じの方がいらっしゃいましたらご教示いただきたく質問いたしました。何卒!よろしくお願いいたします。(>_<)