¿Es posible filtrar comentarios en una publicación para que un usuario solo pueda ver los comentarios que ha escrito?

8

Soy relativamente nuevo en wordpress y codificación, y estoy trabajando en un sitio donde los usuarios deberán dejar comentarios para ciertas publicaciones, pero la persona para la que estoy construyendo el sitio quiere que el usuario solo pueda ver los comentarios he escrito para estas publicaciones específicas, y no hay comentarios de otros usuarios.

He estado buscando por un tiempo ahora, y no he podido encontrar una solución que parece funcionar. ¿Hay alguna manera de hacer que esto funcione que sea lo suficientemente simple como para que yo la implemente? Cualquier ayuda sería muy apreciada.

¡Gracias!

Keith Pocock
fuente

Respuestas:

2

Suponiendo que los autores de sus comentarios están destinados a ser usuarios registrados, la forma más fácil es usar un enlace de pre_get_commentsacción para modificar la WP_Comment_Queryvariable de user_idconsulta del objeto , de modo que la consulta solo devuelva comentarios del usuario actual:

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' );

También puede usar en current_user_can()lugar de / además de verificar los roles de los usuarios para adaptar para quién se filtran los comentarios.

Si bien también puede admitir comentarios anónimos al usarlos wp_get_current_commenter()junto con el author_email WP_Comment_Queryargumento, esto no es terriblemente confiable ni seguro. Los datos de ID de comentarista anónimo se almacenan en cookies, lo que significa que el usuario puede borrarlos o las cookies podrían caducar, en cuyo caso el usuario no podrá ver sus comentarios hasta que publiquen otro. Las credenciales también se falsifican con bastante facilidad: los visitantes astutos podrían obtener acceso a los comentarios de otros usuarios.


EDITAR - Por qué esto no estaba funcionando, anteriormente

Después de una investigación más exhaustiva, mis intentos anteriores de usar WP_Comment_Query::set()para cambiar las variables de consulta fallaban porque, como resultado, en WP_Comment_Queryrealidad no tiene un set()método, a diferencia de su WP_Querycontraparte (vea el ticket # 39120 ). Sin embargo, tiene un __call()"Método Mágico" , que estaba interceptando la llamada al set()método inexistente y devolviendo falso, evitando así el error que PHP normalmente habría arrojado y confundiéndome sin fin.

bosco
fuente
Hola Bosco, gracias por tu rápida respuesta. Tenías razón al suponer que esto sería para usuarios registrados. Lo siento, no lo aclaré en mi publicación original. Así que no arruino esto, ¿dónde se colocaría este código? En el archivo comments.php?
Keith Pocock
1
@KeithPocock Este es un "gancho de acción", por lo que se ejecutará cuando sea necesario siempre que WordPress procese el código. Puede pegarlo en el functions.phparchivo de su tema , sin embargo, si un tercero creó el tema, los cambios podrían sobrescribirse cuando el tema se actualice. El mejor lugar para colocar esto es en un nuevo complemento: siga la sección "Introducción" del Manual de desarrollo de complementos (solo la parte superior de la página) para crear un nuevo archivo de complemento, luego pegue la solución en mi respuesta debajo de información del encabezado
bosco
Hola Bosco, gracias por la aclaración. Traté de colocarlo en el archivo functions.php, pero no filtró los comentarios de un usuario específico cuando lo probé (lo más probable es que esté haciendo algo mal o no entiendo jaja). Esta vez lo intentaré como un complemento y responderé con cualquier resultado. ¡Gracias de nuevo!
Keith Pocock
@KeithPocock ¡Vaya! Encontré un pequeño error en mi código: debería funcionar en un complemento o functions.phpahora (aunque, para ser sincero, en realidad no lo he probado Oo). ¡Déjame saber como va!
bosco
1
Continuemos esta discusión en el chat .
bosco