コメント投稿者のリンクをauthorページにしたい
-
いつもお世話になっております。
現在、functions.phpに
add_filter('get_comment_author_url','add_comment_author_url'); function add_comment_author_url($url){ if($url == ''){ $author = get_comment_author(); $url = get_home_url() .'/author/'. $author; } return esc_url($url); } require_once ( ABSPATH . WPINC . '/registration.php' );
と記載して、コメント投稿者名にリンクをつけることはできていますが
そのリンクを、ユーザーページ(author.php)にすることができません。・表示されている名前はニックネーム
・ブルートフォース対策で/?author=●●にはアクセス不可にしてあるため
/author/ユーザー名でアクセスしたいよろしければ、ご教授お願いいたします。。
-
Hinaloeさま、ありがとうございます><!
add_filter('get_comment_author_url','add_comment_author_url'); function add_comment_author_url($url){ if($url == ''){ $author = get_comment_author(); $url = get_the_author_meta('user_url') } return esc_url($url); } require_once ( ABSPATH . WPINC . '/registration.php' );
ご教授いただいたget_the_author_meta関数を入れてみたのですが、
リンク自体が表示されなくなりました。
挿入の仕方が間違っているのでしょうか・・add_filter('get_comment_author_url','add_comment_author_url'); function add_comment_author_url($url){ if($url == ''){ $author = get_comment_author('user_nicename'); $url = get_home_url() .'/author/'. $author; } return esc_url($url); } require_once ( ABSPATH . WPINC . '/registration.php' );
こうしてみると、/author/匿名と表示されてしまいます。
匿名って何でしょうか・・・この関数ってコメントの投稿者名を取得するものですよね?
function get_comment_author( $comment_ID = 0 ) { $comment = get_comment( $comment_ID ); if ( empty( $comment->comment_author ) ) { if ( $comment->user_id && $user = get_userdata( $comment->user_id ) ) $author = $user->display_name; else $author = __('Anonymous'); } else { $author = $comment->comment_author; } /** * Filter the returned comment author name. * * @since 1.5.0 * * @param string $author The comment author's username. */ return apply_filters( 'get_comment_author', $author ); }
…………もしかしてこれって’表示する際にフィルタかける’よりも’投稿の際にフィルタかける’方が適してることやろうとしているのかもしれませんね。(勝手な思い込みかもしれませんが。)
Hinaloe様
ご回答ありがとうございます。
まず根本的に関数の使い方が間違っているという事でしょうか?こちらの過去の質問を参考にさせていただきました。
[解決済み] コメントの投稿者名にリンクを設定したい
http://ja.forums.wordpress.org/topic/6285?replies=5この方法は、ブログ上の表示名がユーザー名の場合だと思うのですが
今回の場合、ブログ上の表示名をニックネームに設定していますので
そのまま使用させていただくことはできません。ですので、上記URLに記載されているコードを少しいじって、
単純にget_userdataでコメント投稿者のユーザー名を引っ張ってきて
それをURLの末尾に入れればいいと思っていたのですが
うまくいかず・・・。
なにかヒントをいただけたら幸いです。。とりあえず、
get_comment_author
関数の引数はコメントID(数字)が入ります。指定したコメントが存在しない場合は__('Anonymous');
、つまり日本語環境では匿名と言う文字列が返ってきたわけですね。今回はコメントループ内で使っているので引数を省略すればコメントの投稿者名になります。
もしリンク先同様(?)、コメント出来るのが登録ユーザーのみならばこの方法でも使えなくは無いかと思います。
不特定多数がコメント出来るサイトなら特に、コメント投稿時にログイン中のユーザーかどうかのチェックをした上で追加してやる方がいいかと思いますが…………
Hinaloe様 ご教授ありがとうございます。
get_comment_author関数で実現できる、ということなのですね!
function get_comment_author( $comment_ID = 0 ) { $comment = get_comment( $comment_ID ); if ( empty( $comment->comment_author ) ) { if ( $comment->user_id && $user = get_userdata( $comment->user_id ) ) $author = $user->display_name; else $author = __('Anonymous'); } else { $author = $comment->comment_author; } /** * Filter the returned comment author name. * * @since 1.5.0 * * @param string $author The comment author's username. */ return apply_filters( 'get_comment_author', $author ); }
ご提示いただいたこのコードを試してみたいのですが
functions.phpに記載したところ、
Parse error: syntax error, unexpected T_ELSE in ~~~functions.php on line 10
と表示されてしまいました。未熟のためどのように訂正すればよいのかわからずすみません。。。
あ、この関数は実際のコアに含まれてるコードをコピペしたものです。内部を見せるために用意したものであって既に定義されているので再定義しようとするとコンフリクトしますよ。言いたかったのはこの関数の使い方が間違っている、ということです。この関数を追加する必要はありませんよ 🙂
Hinaloe様、ありがとうございます。
このコードはコアファイルのものだったのですね。すみません…
未知でお恥ずかしい限りです…。ログインユーザーのみコメントを投稿できる設定にしています。
add_filter('get_comment_author_url','add_comment_author_url'); function add_comment_author_url($url){ if($url == ''){ $author = get_comment_author(); $url = get_home_url() .'/author/'. $author; } return esc_url($url); } require_once ( ABSPATH . WPINC . '/registration.php' );
と、表記したときに、リンクが/autor/ニックネーム となるのは
コアファイルで $author = $user->display_name; となっていたからなのですね。知識不足のため、難しいことはわからないのですが…
/author/ニックネーム のリンクでもプロフィールページが表示できるようにするか、
もしくは$authorで取得した表示名から、ユーザーIDを引っ張ってくるということに
なるのでしょうか?おっしゃっていた’投稿の際にフィルタかける’というのが
どのようにすればわからないのでこのようなことしか浮かびません…汗/author/ニックネーム のリンクでもプロフィールページが表示できる…
この、author ページののスラッグは、user_nicename なので、初期設定のままだと、user_login と同じになっています。mae-tel さんのパーマリンク設定では、
http://example.com/author/user_nicename/
となるのではないでしょうか。この user_nicename を変更すると、上のスラッグを変えることができますが、WordPress には、それをする API がありません。データベースを直接いじるか、ちょっとした PHP コードを書く必要があります。
$authorで取得した表示名から、ユーザーIDを引っ張ってくる…
お気づきのように、$author は、display_name ですが、display_name から ID を得る関数がありません。user_nicename は、users テーブルにありますから、user_meta 系の関数も意味がありません。
今回の場合、コメント投稿者は全員 users テーブルにエントリを持っている前提なので、コメント・オブジェクトにはその情報が含まれています。ということで、get_comment_author_url を使う場所で、グローバルに存在する $comment 変数を使うとどうなりますかね? 使う場所によっては動作しないかもしれませんが。
add_filter('get_comment_author_url', 'add_comment_author_url'); function add_comment_author_url($url) { if ($url == '') { global $comment; $user_id = isset($comment) ? $comment->user_id : ''; if (!empty($user_id)) { $userdata = get_userdata($user_id); $url = get_home_url() . '/author/' . $userdata->user_nicename . '/'; } } return $url; }
- トピック「コメント投稿者のリンクをauthorページにしたい」には新たに返信することはできません。