Kategorie
filtr dnia WordPress

Filtr dnia: comments_open

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_open1, 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.

pobierz plik: iworks-attachements-close-comments

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
Przypisy
  1. WordPress::Hook::comments_open []

6 odpowiedzi na “Filtr dnia: comments_open”

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

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany.