Odpowiedzi na komentarze bez wątków zawierają link do oryginalnego komentarza


10

Wyjaśnię, co próbuję osiągnąć.

Chciałbym mieć regularne komentarze bez wątków (płaskie / klasyczne) z linkiem odpowiedzi do każdego komentarza. Gdy ktoś odpowie na komentarz, komentarz odpowiedzi znajdzie się na górze (lub na dole) jako najnowszy komentarz, tak jak w domyślnych komentarzach niepodzielonych na wątki, ale w przeciwieństwie do domyślnego komentarza niepodzielonego na wątkach, odpowiedź powinna zawierać link do oryginalny komentarz / autor.

Na forum wordpress znajduje się proponowane rozwiązanie:

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

Po prostu nie działam. Nie jestem pewien, w jakich plikach plakat umieszcza różne fragmenty kodu. Próbowałem użyć kodu i podpiąć funkcję do 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 );
    } 
  }
}

Zwróciło to pustą stronę z „w odpowiedzi na nazwę autora ”. Po ponownym załadowaniu postu komentarz do odpowiedzi jest wyświetlany poprawnie, ale bez linku do oryginalnego komentarza

Moje umiejętności kodowania są naprawdę bardzo podstawowe, więc nie mam pojęcia, jak mam postępować. Byłbym bardzo wdzięczny za wszelką pomoc.


Jaka jest zawartość sekcji hrefw aktóry następuje „w odpowiedzi to` jak na«Zbadaj element»narzędzie w Chrome (lub podobny w swojej przeglądarce wyboru)?
mor7ifer

Rozwiązałem problem po wielu próbach i błędach. Sztuką było uporządkowanie fragmentów kodu we właściwej kolejności oraz umieszczenie w plikach komentarzy i funkcji. sW %1$sużyciu, że argument jest traktowana jak i prezentowanych jako ciąg znaków. Jest to szczegółowo wyjaśnione w podręczniku php dla funkcji sprintf: php.net/manual/en/function.sprintf.php
sarytash

3
Powinieneś przesłać to, co zrobiłeś, jako rozwiązanie, które pomoże utrzymać porządek na stronie i pomoże każdemu, kto przyjdzie po ciebie z tym samym problemem, szybko i skutecznie go rozwiązać.
mor7ifer

Tak, jeśli możesz opublikować działające rozwiązanie, które byłoby świetne.
Borek Bernard

1
zgodził się, chciałbym zobaczyć to w akcji.
helgatheviking

Odpowiedzi:


4

To jest moje rozwiązanie, a nie proponowane rozwiązanie sugerowane na forach WordPress. Okazuje się, że jest to dość łatwe, ale wymaga kilku kroków.

1) Przejdź do wp-admin-> Ustawienia-> Dyskusja i wyłącz komentarze w wątkach. Spowoduje to wyłączenie wątków, które chcemy, ale także usunie możliwość „odpowiadania” na określony komentarz. Musimy to cofnąć.

2) Dodaj poniższy skrypt do funkcji theme.php lub wtyczki.

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) Drukowanie komentarzy jest obsługiwane przez wywołanie zwrotne do wp_list_comments . TwentyEleven wykorzystuje funkcję twentyeleven_comment()w ITS functions.php. Jeśli Twój motyw nie ma wywołania zwrotnego, musisz go utworzyć. Domyślnie używana jest treść metody start_el klasy Walker_Comment w „wp-include / comment-template.php”. Zrozumiałem lub skopiować zwrotnego Temat i zmienić nazwę funkcji do fake_threaded_comment.

3) Znajdź funkcję wp_list_comments w swoim motywie comments.phpi zmień wywołanie zwrotne. Powinno to wyglądać następująco:

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

4) Teraz będziemy trochę oszukiwać. W tym wywołaniu zwrotnym „fake_threaded_comment” powinno być wywołanie funkcji comment_reply_link . Musimy go edytować, aby przekazywać na stałe argumenty „głębokość” i „max_depth”. Ustawiamy „głębokość” na 1, a max_depth na 2. Spowoduje to powrót naszego przycisku / linku „Odpowiedz”.

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

5) Ustaw link do komentarza nadrzędnego. Z boku funkcja zwrotna, do której mogłeś zauważyć odniesienia $comment. $comment->comment_parentjest identyfikatorem odpisanego komentarza i get_comment_link($comment->comment_parent)podaje adres URL komentarza nadrzędnego (nie pełnego znacznika kotwicy). get_comment($comment->comment_parent)otrzyma dane komentarza rodzica. Coś w stylu ...

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

Otóż ​​to. Możesz teraz komentować poszczególne komentarze, ale po opublikowaniu komentarz pojawi się na końcu lub na początku listy komentarzy, w zależności od kolejności ładowania.

Testowane z TwentyEleven na WordPress 3.4.1 (nieco przestarzałe, ale jest już na moim serwerze deweloperskim). Jestem pewien, że istnieją rzeczy, które motywy lub wtyczki mogłyby zrobić, aby to zepsuć, ale nie sądzę, że dobrze zachowany motyw lub wtyczka by to zepsuły.

To jest mój dobry uczynek na ten dzień. Daj mi znać, jeśli coś pójdzie nie tak.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.