Nicht-Thread-Kommentar antwortet mit Link zum ursprünglichen Kommentar

10

Ich werde erklären, was ich erreichen will.

Ich hätte gerne regelmäßige Kommentare ohne Thread (flach / klassisch) mit einem Antwortlink zu jedem Kommentar. Wenn jemand auf einen Kommentar antwortet, wird der Antwortkommentar wie in den Standardkommentaren ohne Thread oben (oder unten) als letzter Kommentar angezeigt. Im Gegensatz zum Standardkommentar ohne Thread sollte in der Antwort jedoch ein Link zu angezeigt werden der ursprüngliche Kommentar / Autor.

Im WordPress-Forum wird eine Lösung vorgeschlagen:

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

Ich bekomme es einfach nicht zum Laufen. Ich bin nicht sicher, in welchen Dateien das Poster die verschiedenen Codeteile platziert. Ich habe versucht, den Code zu verwenden und eine Funktion an comment_post anzuhängen:

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

Dies gab eine leere Seite mit "als Antwort auf den Autorennamen " zurück. Nach dem erneuten Laden des Beitrags wird ein Antwortkommentar korrekt angezeigt, jedoch ohne Link zum ursprünglichen Kommentar

Meine Codierungsfähigkeiten sind wirklich sehr grundlegend, daher habe ich keine gute Idee, wie ich vorgehen soll. Wäre sehr dankbar für jede Hilfe.

Sarytash
quelle
Was ist der Inhalt der hrefin der adie ‚Antwort to` gemäß dem‚Inspect Element‘Werkzeug in Chrome (oder in Ihrem Browser der Wahl) folgt?
Mor7ifer
Ich habe das Problem nach vielen Versuchen und Irrtümern gelöst. Der Trick bestand darin, die Codeteile in der richtigen Reihenfolge und in den Kommentaren und Funktionsdateien zu platzieren. Das sin %1$sbedeutet, dass das Argument als Zeichenfolge behandelt und dargestellt wird. Dies wird im PHP-Handbuch für die Sprintf-Funktion ausführlich erklärt: php.net/manual/en/function.sprintf.php
Sarytash
3
Sie sollten einreichen, was Sie als Lösung getan haben, um die Website besser zu organisieren und allen, die mit demselben Problem hinter Ihnen her sind, zu helfen, es schnell und effizient zu überwinden.
Mor7ifer
Ja, wenn Sie eine funktionierende Lösung veröffentlichen könnten, wäre das großartig.
Borek Bernard
1
stimmte zu, würde dies gerne in Aktion sehen.
Helgatheviking

Antworten:

4

Dies ist meine Lösung und nicht die in den WordPress-Foren vorgeschlagene Lösung. Es stellt sich als ziemlich einfach heraus, erfordert jedoch einige Schritte.

1) Gehen Sie zu wp-admin-> Einstellungen-> Diskussion und deaktivieren Sie Thread-Kommentare. Dadurch wird das gewünschte Threading deaktiviert, aber es wird auch nicht mehr möglich sein, auf einen bestimmten Kommentar zu "antworten". Das müssen wir zurückstellen.

2) Fügen Sie das folgende Skript zur Datei functions.php Ihres Themas oder zu einem Plugin hinzu.

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) Das Drucken der Kommentare erfolgt durch einen Rückruf an wp_list_comments . TwentyEleven verwendet die Funktion twentyeleven_comment()in seiner functions.php. Wenn Ihr Thema keinen Rückruf hat, müssen Sie einen erstellen. Standardmäßig wird der Inhalt der start_el-Methode der Walker_Comment-Klasse in "wp-includes / comment-template.php" verwendet. Kopieren Sie das oder kopieren Sie den Rückruf des Themas und benennen Sie die Funktion in um fake_threaded_comment.

3) Suchen Sie die Funktion wp_list_comments in Ihrem Thema comments.phpund ändern Sie den Rückruf. Es sollte so aussehen:

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

4) Jetzt werden wir ein wenig schummeln. In diesem Rückruf 'fake_threaded_comment' sollte die Funktion comment_reply_link aufgerufen werden. Wir müssen es so bearbeiten, dass wir fest codierte Argumente 'depth' und 'max_depth' übergeben. Wir setzen 'Tiefe' auf 1 und max_depth auf 2. Dadurch erhalten wir unseren "Antwort" -Button / Link zurück.

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

5) Richten Sie den Link zum übergeordneten Kommentar ein. Neben der Rückruffunktion haben Sie möglicherweise Verweise auf bemerkt $comment. $comment->comment_parentist die ID des beantworteten Kommentars und get_comment_link($comment->comment_parent)gibt die URL des übergeordneten Kommentars an (nicht das vollständige Anker-Markup). get_comment($comment->comment_parent)erhält die übergeordneten Kommentardaten. Also so etwas wie ...

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

Das ist es. Sie können jetzt bestimmte Kommentare kommentieren, aber sobald sie veröffentlicht wurden, wird der Kommentar je nach Ladereihenfolge am Ende oder am Anfang der Kommentarliste angezeigt.

Getestet mit TwentyEleven unter WordPress 3.4.1 (etwas veraltet, aber es ist bereits auf meinem Entwicklungsserver). Ich bin mir sicher, dass es Dinge gibt, die Themen oder Plugins tun könnten, um dies zu verhindern, aber ich glaube nicht, dass ein gut erzogenes Thema oder Plugin dies verhindern würde.

Das ist meine gute Tat für diesen Tag. Bitte lassen Sie mich wissen, wenn etwas schief geht.

s_ha_dum
quelle