È possibile filtrare i commenti in un post in modo che un utente possa vedere solo i commenti che hanno scritto?


8

Sono relativamente nuovo per wordpress e codifica e sto lavorando su un sito in cui gli utenti dovranno lasciare commenti per determinati post, ma la persona per cui sto costruendo il sito vuole che l'utente sia in grado di vedere solo i commenti hanno scritto per questi post specifici e non commenti da altri utenti.

Sto cercando da un po 'di tempo ormai e non sono stato in grado di trovare una soluzione che sembra funzionare. C'è un modo per farlo funzionare che è abbastanza semplice per me da implementare? Qualsiasi aiuto sarebbe molto apprezzato.

Grazie!

Risposte:


2

Supponendo che il tuo commento autori sono destinati ad essere utenti registrati, il modo più semplice è probabilmente quello di utilizzare un pre_get_commentsazione di gancio per modificare l' WP_Comment_Queryoggetto s' user_idvar query in modo tale che la query restituisce solo i commenti da parte dell'utente corrente:

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

È inoltre possibile utilizzare current_user_can()anziché / oltre a verificare i ruoli utente per personalizzare i filtri per i commenti.

Anche se puoi anche supportare i commenti anonimi usando wp_get_current_commenter()insieme author_email WP_Comment_Queryall'argomento, questo non è terribilmente affidabile o sicuro. I dati dell'ID commentatore anonimo sono memorizzati nei cookie, il che significa che l'utente può cancellarli o i cookie potrebbero scadere, nel qual caso l'utente non sarebbe in grado di visualizzare i propri commenti fino a quando non ne pubblicano un altro. Le credenziali sono anche facilmente falsificate: i visitatori furbi potrebbero potenzialmente accedere ai commenti di altri utenti.


EDIT - Perché questo non funzionava, in precedenza

Dopo ulteriori indagini, i miei precedenti tentativi di utilizzare WP_Comment_Query::set()per modificare le variabili di query non andavano a buon fine perché, a quanto pare, in WP_Comment_Queryrealtà non ha un set()metodo, a differenza della sua WP_Querycontroparte (vedi ticket # 39120 ). Ha tuttavia un __call()"Metodo magico" , che intercettava la chiamata al set()metodo inesistente e restituiva falso, impedendo così l'errore che PHP avrebbe normalmente gettato e confondendomi fino alla fine.


Ciao Bosco, grazie per la tua rapida risposta. Hai ragione nel ritenere che ciò sarebbe per gli utenti registrati. Mi dispiace non ho chiarito nel mio post originale. Quindi non rovinare tutto, dove verrebbe inserito questo codice? Nel file commenti.php?
Keith Pocock,

1
@KeithPocock Questo è un "hook di azione" - quindi verrà eseguito quando è necessario fino a quando WordPress elabora il codice. Puoi inserirlo nel functions.phpfile del tuo tema , tuttavia se una terza parte ha creato il tema, le modifiche potrebbero essere sovrascritte quando il tema si aggiorna. Il posto migliore per inserirlo è in un nuovo plug-in: segui la sezione "Guida introduttiva" del Manuale di sviluppo plug-in (solo la parte superiore della pagina) per creare un nuovo file plug-in, quindi incolla la soluzione nella mia risposta sotto la informazioni di intestazione.
bosco

Ciao Bosco, grazie per il chiarimento. Ho provato a inserirlo nel file Functions.php, ma non ho filtrato i commenti per un utente specifico quando l'ho provato (molto probabilmente qualcosa che sto facendo di sbagliato o non capisco ahah). Questa volta lo proverò come plug-in e risponderò con qualsiasi risultato. Grazie ancora!
Keith Pocock,

@KeithPocock Oops! Ho trovato un piccolo bug nel mio codice - dovrebbe funzionare in un plug-in o functions.phpora (anche se a dire il vero non l'ho ancora testato Oo). Fammi sapere come va!
bosco

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.