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

Opublikowano

in

,

by

Komentarze

6 odpowiedzi na „Filtr dnia: comments_open”

  1. Awatar 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

    1. Awatar 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

      1. Awatar Konrad

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

  2. Awatar 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);

    1. Awatar 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 ;) )

Jeżeli chcesz skomentować, napisz mail na adres marcin w domenie strony na której jesteś. Dodam twoj komentarz.