Dengan asumsi penulis komentar Anda dimaksudkan untuk menjadi pengguna terdaftar, cara termudah adalah mungkin untuk menggunakan pre_get_comments
tindakan kait untuk memodifikasi WP_Comment_Query
objek 's user_id
var permintaan sehingga query hanya mengembalikan komentar dari pengguna saat ini:
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' );
Anda juga dapat menggunakan current_user_can()
alih-alih / di samping memeriksa peran pengguna untuk menyesuaikan komentar yang difilter.
Meskipun Anda juga dapat mendukung komentar anonim dengan menggunakan wp_get_current_commenter()
dalam hubungannya dengan author_email
WP_Comment_Query
argumen, ini tidak terlalu dapat diandalkan atau aman. Data ID komentator anonim disimpan dalam cookie, artinya pengguna dapat menghapusnya atau cookie dapat kedaluwarsa - dalam hal ini pengguna tidak dapat melihat komentar mereka sampai mereka memposting yang lain. Kredensial juga cukup mudah dipalsukan - pengunjung yang licik berpotensi mendapatkan akses ke komentar dari pengguna lain.
EDIT - Mengapa ini tidak berhasil, sebelumnya
Setelah penyelidikan lebih lanjut, upaya saya sebelumnya untuk menggunakan WP_Comment_Query::set()
untuk mengubah variabel permintaan gagal karena ternyata, WP_Comment_Query
sebenarnya tidak memiliki set()
metode, tidak seperti WP_Query
rekannya (lihat tiket # 39120 ). Namun ia memiliki __call()
"Metode Sihir" , yang mencegat panggilan ke metode yang tidak ada set()
dan mengembalikan false, sehingga mencegah kesalahan yang biasanya dilemparkan PHP dan membingungkan saya tanpa akhir.