投稿のコメントをフィルタリングして、ユーザーが自分が書いたコメントのみを表示できるようにすることはできますか?


8

私はワードプレスとコーディングに比較的慣れていないため、ユーザーが特定の投稿に対してコメントを残す必要があるサイトで作業していますが、サイトを構築している人は、ユーザーがコメントのみを表示できるようにしたいと考えています他のユーザーからのコメントではなく、これらの特定の投稿について書いています。

私は今しばらく探し回っていましたが、うまくいくと思われる解決策を見つけることができませんでした。これを機能させるために、実装するのに十分簡単な方法はありますか?どんな助けでも大歓迎です。

ありがとう!

回答:


2

コメント作成者が登録ユーザーを対象としていると想定すると、最も簡単な方法は、おそらく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が通常スローするエラーを防ぎ、私を終わりまで混乱させます。


こんにちはボスコ、あなたの迅速な対応をありがとう。これは登録ユーザー向けであると想定して間違いありませんでした。申し訳ありませんが、元の投稿では説明がありませんでした。だから私はこれを台無しにしないでください、このコードはどこに配置されますか?コメント.phpファイルで?
キース・ポコック2017

1
@KeithPocockこれは「アクションフック」です。WordPressがコードを処理する限り、必要なときに実行されます。テーマのfunctions.phpファイルに貼り付けることができますが、サードパーティがテーマを作成した場合、テーマの更新時に変更が上書きされる可能性があります。これを配置するのに最適な場所は、新しいプラグインです。プラグイン開発ハンドブック「はじめに」セクション(ページの最上部)に従って新しいプラグインファイルを作成し、ソリューションを以下の私の回答に貼り付けます。ヘッダー情報。
bosco

こんにちはボスコ、説明をありがとう。私はそれをfunctions.phpファイルに配置しようとしましたが、テストしたときに特定のユーザーのコメントを除外しませんでした(おそらく私が間違っているか、理解していない)。今回はプラグインとして試してみて、結果があれば返信します。再度、感謝します!
キース・ポコック2017

@KeithPocockおっと!私はコードに小さなバグを見つけました-プラグインでもfunctions.php今でも機能するはずです(正直に言うと、実際にOoをテストしていません)。それがどうなるか教えてください!
bosco

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.