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.
href
wa
który następuje „w odpowiedzi to` jak na«Zbadaj element»narzędzie w Chrome (lub podobny w swojej przeglądarce wyboru)?s
W%1$s
uż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.phpOdpowiedzi:
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.
3) Drukowanie komentarzy jest obsługiwane przez wywołanie zwrotne do wp_list_comments . TwentyEleven wykorzystuje funkcję
twentyeleven_comment()
w ITSfunctions.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 dofake_threaded_comment
.3) Znajdź funkcję wp_list_comments w swoim motywie
comments.php
i zmień wywołanie zwrotne. Powinno to wyglądać następująco: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”.
5) Ustaw link do komentarza nadrzędnego. Z boku funkcja zwrotna, do której mogłeś zauważyć odniesienia
$comment
.$comment->comment_parent
jest identyfikatorem odpisanego komentarza iget_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 ...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.
źródło