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.
functions.php
file tema Anda , namun jika pihak ketiga yang membuat tema, perubahan bisa ditimpa saat tema diperbarui. Tempat terbaik untuk meletakkan ini adalah di plugin baru - ikuti bagian "Memulai" dari Buku Pegangan Pengembangan Plugin (hanya bagian paling atas dari halaman) untuk membuat file plugin baru, kemudian tempelkan solusi dalam jawaban saya di bawah informasi tajuk.functions.php
sekarang (walaupun jujur saya belum benar-benar mengujinya Oo). Biarkan saya tahu bagaimana kelanjutannya!