Si puedes,
Sólo frontend
necesitarías revisar el autor de cada comentario para su función. Si el rol del autor de ese comentario no es adverstisers , elimínelo de la matriz de comentarios adjunta a esa publicación.
Entonces, solo tendría que devolver los comentarios si el usuario que ha iniciado sesión actualmente también tiene el rol de anunciantes .
utilizando el filtro comments_array
podemos revisar cada comentario adjunto a una publicación. Pero este filtro se aplica en comments_template para que no afecte los comentarios de acceso en el backend.
Así es como puedes hacerlo
add_filter( 'comments_array' , 'wpse_filter_by_role_frontend' , 10, 2 );
function wpse_filter_by_role_frontend( $comments, $post_id ){
$current_user = wp_get_current_user(); // retrieve the currently logged in user
// go over each comments for the current post
foreach( $comments as $key => $comment ){
$comment_author = new WP_User( $comment->user_id ); // for each comment get the author user object
// here we say unset the current comment if the role of the comment author is not the same as the role of the logged in user
if( $comment_author->roles[0] != $current_user->roles[0] ){
unset( $comments[$key] );
}
}
// Return the filtered $comments array
return $comments;
}
Frontend y backend
add_action( 'pre_get_comments' , 'wpse_hide_for_backend' );
function wpse_hide_for_backend( $comments_query ){
// Hide all for non logged in users
if( !is_user_logged_in() ){
return $comments_query->query_vars['comment__in'] = array(0);
}
$current_user = wp_get_current_user();
// if you don't want to apply restrictions to admins
if( $current_user->roles[0] == 'administrator' ){
return $comments_query;
}
$user_ids = get_users( array(
'role__in' => $current_user->roles,
'fields' => 'ID'
) );
$comments_query->query_vars['author__in'] = $user_ids;
}
EDIT
He modificado la segunda función.
Al ver la respuesta de @birgire, me di cuenta de que había una consulta author_in
arg y que al usar get_users
con la consulta arg role__in
podemos lograr el efecto deseado tanto en el frente como en el final.
Gracias a @birgire por la inspiración :)
EDIT
Para permitir más que solo el rol del usuario actual en la obtención de comentarios (como agregar comentarios hechos por administradores), simplemente agregue la matriz en role__in
con los roles deseados
por lo que la función se convertiría
add_action( 'pre_get_comments' , 'wpse_hide_for_backend' );
function wpse_hide_for_backend( $comments_query ){
// Hide all for non logged in users
if( !is_user_logged_in() ){
return $comments_query->query_vars['comment__in'] = array(0);
}
$current_user = wp_get_current_user();
// if you don't want to apply restrictions to admins
if( $current_user->roles[0] == 'administrator' ){
return $comments_query;
}
$user_ids = get_users( array(
'role__in' => array(
'administrator',
$current_user->roles[0],
),
'fields' => 'ID'
) );
$comments_query->query_vars['author__in'] = $user_ids;
}
o (para facilitar la lectura en este foro)
$permitted_roles = array(
'administrator',
$current_user->roles[0],
);
$user_ids = get_users( array(
'role__in' => $permitted_roles,
'fields' => 'ID'
) );