Na kilku blogach, w różnych okresach czasu i różną intensywnością, zdarzały się spamerskie komentarze na stronie załącznika. Są one całkiem upierdliwe, choć zazwyczaj niewidoczne, bo szczerze, kto ogląda stronę załącznika?
Poniżej przedstawię szybki sposób na wyłączenie komentowania na stronach załączników.
Prostym sposobem jest skorzystanie z filtra comments_open
((WordPress::Hook::comments_open)), który połączony ze sprawdzeniem typu treści pozwoli na szybkie i systemowe zamknięcie możliwości komentowania na stronach załączników.
Kod jest bardzo krótki i mało wymagający, można go umieścić w dowolny sposób.
add_action( 'comments_open', 'iworks_comments_open', PHP_INT_MAX, 2 ); function iworks_comments_open( $open, $post_id ) { $post = get_post( $post_id ); if ( is_object( $post ) && isset( $post->post_type ) && 'attachment' === $post->post_type ) { $open = false; } return $open; } |
Kod do pobrania
Gotowy kod w formie wtyczki, możesz pobrać poniżej.
[zip href="http://iworks.pl/wp-content/uploads/2019/11/iworks-attachements-close-comments.php-.zip"]iworks-attachements-close-comments[/zip]Jak użyć podany kod?
Masz 3 rozwiązania:
- wrzuć załączony plik do folderu
wp-content/plugins
, a potem włącz wtyczkę - wrzuć załączony plik do folderu
wp-content/mu-plugins
- dołącz kod do pliku
functions.php
aktualnie używanego motywu
Konrad
Szybki code review ;)
`is_object()` możesz chyba pominąć, samo isset sprawdzi czy to jest obiekt: https://3v4l.org/LdBVV
A jeśli chcesz tego użyć tylko na swojej stronie i nie musisz się martwić o PHP w wersjach starszych niż 7.0, to możesz pobawić się w PHP golfa i skrócić cały if do jednej linijki:
„`
if ( ( $post->post_type ?? 'not-attachment’ ) === 'attachement’ )
„`
https://3v4l.org/Babft
Marcin Pietrzak
Generalnie masz rację, ale snippet jako taki ma działać „wszędzie” więc jak najbardziej warto zachować wsteczny poziom.
No i proszę pamiętaj w warunkach o „Yoda conditions” https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#yoda-conditions
Konrad
wiem, wiem o joda. Odnosnie wstecznej, to is_object() nie bylo potrzebne nawet w php4, wiec mozna spokojnie usuwac :)
Konrad
w sumie to zmieniłem w ramach ćwiczeń czy się tak da, cały twój kod w jednolinijkowca :)
add_action( 'comments_open', function ( $open, $post_id ) { return ! ( 'attachment' === get_post_type( $post_id ) ); }, PHP_MAX_INT, 2);
Konrad
(juz widze, ze jest blad, bo kod zmienia ustawienie open zawsze, ignoruje co otrzymal i jesli otrzymal zamkniete, to otworzy zawsze gdy to nie jest zalacznik. ale koncze na razie zabawe i biore sie do roboty ;) )
Marcin Pietrzak
:D