回答:
コメント作成者が登録ユーザーを対象としていると想定すると、最も簡単な方法は、おそらくpre_get_comments
アクションフックを使用して、現在のユーザーからのコメントのみが返されるようにWP_Comment_Query
オブジェクトのuser_id
クエリ変数を変更することです。
function wpse262203_restrict_comment_views( $comments_query ) {
// Don't interfere with comment results in the dashboard
if( is_admin() )
return;
$current_user = wp_get_current_user(); // Get the current user
if( $current_user instanceof WP_User && is_user_logged_in() ) {
// The visitor is logged in as a WordPress user...
// If they're an administrator, don't filter the comments
if( in_array( 'administrator', $current_user->roles ) )
return;
// Otherwise, restrict queried comments to those authored by this user.
$comments_query->query_vars[ 'user_id' ] = $current_user->ID;
}
else {
// The visitor isn't logged in - make sure no comments are queried.
$comments_query->query_vars[ 'comment__in' ] = array(0);
}
}
add_action( 'pre_get_comments', 'wpse262203_restrict_comment_views' );
あなたもすることができます使用current_user_can()
ユーザーの役割のチェックに加えて、代わりに/のコメントがためにフィルタリングされ仕立て屋に。
引数wp_get_current_commenter()
と組み合わせて使用することで匿名コメントをサポートすることもできますがauthor_email
WP_Comment_Query
、これは非常に信頼性が高く、安全ではありません。匿名のコメンターIDデータはCookieに保存されます。つまり、ユーザーがそれをクリアするか、Cookieが期限切れになる可能性があります。その場合、ユーザーはコメントを投稿するまでコメントを表示できません。資格情報もかなり簡単に偽装されます-巧妙な訪問者は他のユーザーからのコメントにアクセスできる可能性があります。
さらに調査したところ、WP_Comment_Query::set()
クエリ変数を変更するための以前の試みは失敗しました。これは、対応するものとは異なり、WP_Comment_Query
実際にはset()
メソッドがないためですWP_Query
(チケット#39120を参照)。ただし、存在しないメソッドへの呼び出しをインターセプトしてfalseを返す__call()
「マジックメソッド」はありset()
ます。これにより、PHPが通常スローするエラーを防ぎ、私を終わりまで混乱させます。
functions.php
ファイルに貼り付けることができますが、サードパーティがテーマを作成した場合、テーマの更新時に変更が上書きされる可能性があります。これを配置するのに最適な場所は、新しいプラグインです。プラグイン開発ハンドブックの「はじめに」セクション(ページの最上部)に従って新しいプラグインファイルを作成し、ソリューションを以下の私の回答に貼り付けます。ヘッダー情報。
functions.php
今でも機能するはずです(正直に言うと、実際にOoをテストしていません)。それがどうなるか教えてください!