Druga część wpisu poświęconego funkcji comment_form(). Bardziej zaawansowane modyfikacje najczęściej wymagają skorzystania z odpowiednich akcji i/lub filtrów. W tym wpisie przedstawię je po krótce. Dodatkowe informacje na ten temat znajdziesz również w oficjalnej dokumentacji.
Filtry
W poprzednim wpisie omówione zostały argumenty jakie przyjmuje funkcja comment_form(). Korzystanie z argumentów jest szybką metodą wprowadzenia drobnych zmian w formularzu. Przy zaawansowanych modyfikacjach, może okazać się że podawanie samych argumentów nie wystarczy, nie mówiąc o tym że powstanie dość skomplikowany i/lub nieczytelny kod. W takim przypadku lepszym rozwiązaniem jest wykorzystanie filtrów.
comment_form_default_fields
Podobnie, jak argument fields, filtr comment_form_default_fields pozwala na wprowadzanie zmian w domyślnych polach formularza komentarzy (podpis, email, strona WWW). Z jego pomocą możesz usunąć/zmienić któreś z trzech podstawowych pól lub dodać własne. We wpisie Dodatkowe pola w formularzu komentarzy WordPress, korzystałam właśnie z tego filtra do wyświetlenia dodatkowego pola w formularzu.
comment_form_field_{$name}
Pozwala na wprowadzanie zmian dla jednego, konkretnego pola (spośród trzech podstawowych), którego nazwę podajesz, zamiast {$name}. Dopuszczalne nazwy to author, email, url.
Powiedzmy że naszym celem jest modyfikacja kodu HTML dla pola strona WWW, np. zmiana klasy kontenera (element
).
add_filter( 'comment_form_field_url', 'my_comment_form_field_url' );
function my_comment_form_field_author( $field ) {
$field = str_replace( 'class="comment-form-url"', 'class="my-url"', $field );
return $field;
}
comment_form_field_comment
Tak jak arguemnt comment_from odnosi się do pola tekstowego z treścią komentarza. Z pomocą filtra możemy np. zmienić nieco strukturę HTML, wstawiając pole w dodatkowy kontener.
add_filter( 'comment_form_field_comment', 'my_comment_form_field_comment' );
function my_comment_form_field_comment( $comment_field ) {
$comment_field = '<div>' . $comment_field . '</div>';
return $comment_field;
}
comment_form_logged_in
Filtr, który pozwala na modyfikację komunikatu dla użytkowników zalogowanych. Wykorzystamy go do wyświetlenia specjalnej wiadomości dla użytkowników.
add_filter( 'comment_form_logged_in', 'my_comment_form_logged_in', 10, 3 );
function my_comment_form_logged_in( $logged_in_as, $commenter, $user_identity ) {
$logged_in_as .= '<p>' . __( 'Czekamy na Twoją opinię, jest dla nas bardzo ważna!' ) . '</p>';
return $logged_in_as;
}
Jak widzisz, przekazywane są tutaj trzy argumenty, które możemy wykorzystać w naszej funkcji:
$logged_in_as– kod HTML oraz informacje o osobie zalogowanej (komunikat: Zalogowany jako…). Możemy zmienić jego treść, lub dodać jeszcze jeden komunikat, tak jak w przykładowym kodzie powyżej.$commenter– zmienna zawierająca informacje o zalogowanym użytkowniku, wyciągnięte poprzez funkcjęwp_get_current_commenter(),$user_identity– globalna zmienna reprezentująca aktualnego użytkownika
comment_form_defaults
Filtr ten pozwoli Ci przekazać dowolny argument, z jakim można wywołać funkcję comment_form() (poza zmienną fields, którą możesz nadpisać poprzez filtr comment_form_default_fields). W poniższym przykładzie zmienimy treść komunikatu, wyświetlanego tuż nad guzikiem „Publikuj”.
add_filter( 'comment_form_defaults', 'my_comment_form_defaults' );
function my_comment_form_defaults( $defaults ) {
$defaults['comment_notes_after'] = __( 'Zanim komentarz zostanie opublikowany, musi go zatwierdzić moderator.' );
return $defaults;
}
Akcje
Funkcja comment_form() daje duże pole do popisu autorom wtyczek i motywów. Oprócz zestawu argumentów i filtrów do dyspozycji jest jeszcze klika akcji, uruchamianaych w różnych momentach wyświetlania formularza komentarzy. Większość z nich znajdziesz poniżej, dla wygody nałożyłam je na screeenshot formularza. Przykładowy kod znajdziesz na samym końcu tej sekcji, jako że dla wszystkich akcji jego bazowa struktuta jest identyczna.

Poza akcjamjami przedstawionymi na obrazku, istnieją jeszcze trzy, związane z logowaniem i uprawnieniami do komentowania.
comment_form_must_log_in_after
Akcja zostanie uruchomiona tylko gdy użytkownik jest niezalogowany, jeśli dodawanie komentarzy wymaga logowania. Uruchamiana tuż po wyświetleniu wartości dla argumentu must_log_in.
comment_form_logged_in_after
Akcja uruchamiana tylko dla zalogowanych użytkowników, tuż po wyświetleniu wartości dla argumentu logged_in_as.
comment_form_comments_closed
Jedyna akcja uruchamiana, gdy komentowanie jest wyłączone. Wszystkie pozostałe akcje uruchamiane są przy włączonych komentarzach. Jest to w zasadzie jedyny sposób, na wyświetlenie własnego komunikatu w takim wypadku, przykładowy kod poniżej:
add_action( 'comment_form_comments_closed', 'my_comments_closed' );
function my_comments_closed() {
echo '<p class="comments-closed">' . __( 'Przepraszamy, komentarze są wyłączone dla tego wpisu.' ) . '</p>';
}
Podsumowanie
We wstępie do części pierwszej wspominałam, że cały czas funkcjonuje jeszcze wcześniejszy sposób wstawiania komentarzy. Myślę jendak, że sytuacja zmieni się dosyć szybko. Świadczyć o tym może fakt, że korzystanie z funkcji comment_form() jest jednym z wymogów dla motywów w repozytorium WordPress. Osobiście również nie potrafię znaleźć wad tego rozwiązania. Twórcy szablonów – czas na przesiadkę
Related posts:
Tagi: comment_form, komentarze
bardzo fajny artykuł zarówno pierwsza jak i druga część są bardzo czytelnie i szczegółowo opisne
Pozdrawiam