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:

  1. wrzuć załączony plik do folderu wp-content/plugins, a potem włącz wtyczkę
  2. wrzuć załączony plik do folderu wp-content/mu-plugins
  3. dołącz kod do pliku functions.php aktualnie używanego motywu

Komentarze

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

wiem, wiem o joda. Odnosnie wstecznej, to is_object() nie bylo potrzebne nawet w php4, wiec mozna spokojnie usuwac :)

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

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

iWorks Marcin Pietrzak

Wykorzystujemy ciasteczka do spersonalizowania treści i reklam, aby oferować funkcje społecznościowe i analizować ruch w naszej witrynie.

Informacje o tym, jak korzystasz z naszej witryny, udostępniamy partnerom społecznościowym, reklamowym i analitycznym. Partnerzy mogą połączyć te informacje z innymi danymi otrzymanymi od Ciebie lub uzyskanymi podczas korzystania z ich usług.

Informacja o tym, w jaki sposób Google przetwarza dane, znajdują się tutaj.