Risposte ai commenti non thread con collegamento al commento originale


10

Spiegherò cosa sto cercando di realizzare.

Vorrei avere regolari commenti non thread (piatti / classici) con un link di risposta a ciascun commento. Quando qualcuno risponde a un commento, il commento di risposta finirà in cima (o in fondo) come ultimo commento proprio come farebbe nei commenti non thread predefiniti, ma a differenza del commento non thread predefinito la risposta dovrebbe visualizzare un collegamento a il commento / autore originale.

C'è una soluzione proposta nel forum di wordpress:

http://wordpress.org/support/topic/reply-to-link-for-chronological-non-threaded-comments

Solo non riesco a farlo funzionare. Non sono sicuro di quali file il poster stia posizionando i diversi pezzi di codice. Ho provato a utilizzare il codice e agganciare una funzione a comment_post:

add_action('comment_post', 'print_reply_link', 10, 2);

function print_reply_link( $comment_id, $approved ){
  if( $approved ){
    $comment = get_comment( $comment_id );
    if ( $comment->comment_parent ) {
    $parent = get_comment( $comment->comment_parent );
    $parent_link = esc_url( get_comment_link( $comment->comment_parent ) );
    printf( ' in reply to <a href="%1$s">%2$s</a>', $parent_link, $parent->comment_author );
    } 
  }
}

Ciò ha restituito una pagina vuota con "in risposta a authorname ". Dopo aver ricaricato il post, viene visualizzato un commento di risposta corretto ma senza alcun collegamento al commento originale

Le mie capacità di programmazione sono davvero molto basilari, quindi non ho idea di come procedere. Sarei molto grato per qualsiasi aiuto.


Qual è il contenuto del hrefnel ache segue 'in risposta to` come per il 'strumento Inspect Element' in Chrome (o simile nel browser di scelta)?
mor7ifer,

Ho risolto il problema dopo molte prove ed errori. Il trucco era di ottenere i pezzi di codice nell'ordine giusto e inserirli nei file dei commenti e delle funzioni. Il snel %1$ssignifica che l'argomento è trattato, come e presentato come una stringa. Questo è spiegato in dettaglio nel manuale php per la funzione sprintf: php.net/manual/en/function.sprintf.php
Sary Taš

3
Dovresti presentare ciò che hai fatto come soluzione per aiutare a mantenere organizzato il sito e per aiutare chiunque venga dopo di te con lo stesso problema a superarlo in modo rapido ed efficiente.
mor7ifer,

Sì, se potessi pubblicare una soluzione funzionante sarebbe fantastico.
Borek Bernard,

1
d'accordo, mi piacerebbe vederlo in azione.
Helgatheviking,

Risposte:


4

Questa è la mia soluzione e non la soluzione proposta suggerita nei forum di WordPress. Risulta essere abbastanza semplice, ma comporta alcuni passaggi.

1) Vai su wp-admin-> Impostazioni-> Discussione e disattiva i commenti thread. Ciò disabiliterà il threading, che desideriamo, ma rimuoverà anche la possibilità per noi di "rispondere" a un determinato commento. Dobbiamo rimetterlo.

2) Aggiungi lo script qui sotto al Functions.php del tuo tema o ad un plugin.

function load_script_for_fake_threading() {
    if (is_singular()) wp_enqueue_script('comment-reply');
}
add_action('wp_enqueue_scripts','load_script_for_fake_threading');

3) La stampa dei commenti è gestita da un callback a wp_list_comments . TwentyEleven utilizza la funzione twentyeleven_comment()nella sua functions.php. Se il tuo tema non ha un callback dovrai crearne uno. Per impostazione predefinita, viene utilizzato il contenuto del metodo start_el della classe Walker_Comment in "wp-Includes / comment-template.php". Copia quello o copia il callback del tema e rinomina la funzione in fake_threaded_comment.

3) Trova la funzione wp_list_comments nel tuo tema comments.phpe modifica la richiamata. Dovrebbe apparire come:

wp_list_comments(array('callback'=>'fake_threaded_comment'));

4) Ora imbrogliamo un po '. In quel callback, 'fake_threaded_comment', dovrebbe esserci una chiamata alla funzione comment_reply_link . Dobbiamo modificarlo in modo da passare argomenti "depth" e "max_depth" codificati. Stiamo impostando 'depth' su 1 e max_depth su 2. Questo ripristinerà il nostro pulsante / link "Rispondi".

comment_reply_link( 
  array_merge( 
    $args, 
      array( 
        'reply_text' => __( 'Reply <span>&darr;</span>', 
        'themetextdomainname' ), 
        'depth' => 1, 
        'max_depth' => 2 
)));

5) Imposta il collegamento al commento principale. A lato della funzione di callback potresti aver notato riferimenti a $comment. $comment->comment_parentè l'ID del commento con risposta e get_comment_link($comment->comment_parent)fornisce l'URL del commento principale (non il markup di ancoraggio completo). get_comment($comment->comment_parent)otterrà i dati del commento principale. Quindi, qualcosa come ...

$pcom = get_comment($comment->comment_parent);
echo '<a href="'.get_comment_link($comment->comment_parent).'">This is a reply to '.$pcom->comment_author.'</a>';

Questo è tutto. Ora puoi commentare commenti particolari ma, una volta pubblicato, il commento verrà visualizzato alla fine o all'inizio dell'elenco dei commenti a seconda dell'ordine di caricamento.

Testato con TwentyEleven su WordPress 3.4.1 (leggermente obsoleto ma è già sul mio server di sviluppo). Sono sicuro che ci sono cose che temi o plugin potrebbero fare per romperlo, ma non credo che un tema o plugin ben educati lo spezzerebbero.

Questa è la mia buona azione per il giorno. Per favore fatemi sapere se qualcosa va storto.

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.