wyłączasz komentarze jako domyślne dla stron i niestandardowych typów postów?

20

Chcę domyślnie wyłączyć komentarze dla stron i niestandardowych typów postów

Początkowo po prostu użyłem warunku w funkcji wyświetlania komentarzy, aby uniknąć wyświetlania bloku na tych stronach, ale potrzebuję, aby użytkownik mógł włączyć komentarze w razie potrzeby.

Łagodny Fuzz
źródło
1
Przypominam, że dodałem odpowiedź na to pytanie, które moim zdaniem ma pożądany efekt ..
t31os
1
Jestem pewien, że twoja funkcja działa dobrze, ale już wybrałem odpowiedź, która działa dla mojego celu.
Łagodny Fuzz,
Uwaga: Powiązany bilet Trac # 12991
Chip Bennett

Odpowiedzi:

9

Z tego, co rozumiem, chcesz ustawić strony i niektóre niestandardowe typy postów tak, aby komentowanie było domyślnie wyłączone, podczas gdy posty będą nadal korzystać z opcji domyślnej (tj. Komentowanie „włączony”). W takim przypadku zrobi to następująca funkcja.

function default_comments_off( $data ) {
    if( $data['post_type'] == 'page' && $data['post_status'] == 'auto-draft' ) {
        $data['comment_status'] = 0;
    }

    return $data;
}
add_filter( 'wp_insert_post_data', 'default_comments_off' );
sorich87
źródło
1
to się nie udaje, gdy chcesz ponownie włączyć komentarze. Trzeba go edytować, aby działał tylko raz
Mild Fuzz
1
nie na komputerze, ale myślę, że możesz użyć mechaniki metadanych, aby sprawdzić meta, jeśli nie uruchomisz funkcji, w przeciwnym razie dodaj meta i uruchom funkcję.
Łagodny Fuzz,
1
przetestowane, nie będzie to działać tak prosto, ponieważ identyfikator wpisu nie jest zawarty w zmiennej $ data var w Twojej funkcji.
Łagodny Fuzz,
1
Przetestowałem to (z WP 3.0) przed przesłaniem odpowiedzi i zadziałało. Jakiego problemu napotykasz? Identyfikatora posta nie ma w danych $, ponieważ post nie został jeszcze utworzony przed uruchomieniem funkcji (spójrz na filtr w funkcji wp_insert_post). Funkcja będzie działać tylko podczas odwiedzania wp-admin / post-new.php? Post-type = xxx, zanim wpiszesz jakąkolwiek treść w pola.
sorich87
1
na moim serwerze testowym nie mogę ponownie włączyć komentarzy, są one zawsze wyłączone.
Łagodny Fuzz,
10

Kiedy tworzysz nowy post (typ niestandardowy lub zwykły), wywołania WordPress, get_default_post_to_editktóre następnie ustawiają wartości domyślne, które będzie miał nowy post.

Ta funkcja zapewnia kilka chwytów filtrów do zmiany domyślnego tytułu, treści i fragmentu, ale niestety nic więcej ... jednak każdy filtr przekazuje cały $postobiekt do wywołania zwrotnego, co zasadniczo oznacza, że ​​można przedefiniować kilka właściwości (lub tylko jedną, jeśli lubimy)

To powinno działać dla Ciebie, po prostu dodaj typy postów, do których kod powinien się stosować jako przypadki wewnątrz przełącznika .. (film i strona są przykładami) ..

function my_default_content( $post_content, $post ) {
    if( $post->post_type )
    switch( $post->post_type ) {
        case 'page':
        case 'movie':
            $post->comment_status = 'closed';
        break;
    }
    return $post_content;
}
add_filter( 'default_content', 'my_default_content', 10, 2 );

Kod został przetestowany na WP 3.0.1 i ma pożądany efekt polegający na wyłączeniu komentarzy dla typów postów, pozostawiając innym możliwość dziedziczenia domyślnego statusu z default_comment_statusopcji.

Mam nadzieję, że to pomoże .... :)

t31os
źródło
2

Napisałem wtyczkę, aby domyślnie wyłączać komentarze na stronach. http://wordpress.org/extend/plugins/page-comments-off-please/

Może to pomoże?


źródło
1
wydaje się nadmierna, biorąc pod uwagę 5-liniowe rozwiązanie w odpowiedzi sorich87! Na zdrowie.
Łagodny Fuzz,
1
Nie bardzo, istnieje wiele podejść do sprostania wymaganiom kodu, to tylko inna metoda.
t31os
1

Zgodnie z tym wątkiem to , o co prosisz, nie jest możliwe bez użycia niestandardowej wtyczki lub funkcji, aby to osiągnąć.

Travis Northcutt
źródło
1
Nie mam problemu z napisaniem jednego, wystarczy wskazać właściwy kierunek. Haki i filtry itp., Które mogą pomóc.
Łagodny Fuzz,
1
Jeśli skończysz pisać, podziel się tym, co tutaj zrobiłeś! Wydaje się, że wtyczka, która może to zrobić, miałaby wiele zastosowań.
Travis Northcutt,
1

Polecam nadal używać warunków warunkowych na ekranie komentarzy, ale użyj opcji, aby zapisać ustawienia warunkowe. Następnie możesz dodać stronę do menu Ustawienia, która pozwala administratorom włączać i wyłączać komentarze w razie potrzeby.


Aktualizacja

Przyszło mi do głowy, że chcesz ustawić domyślną opcję komentowania jako „wyłączoną” jako ustawienie globalne zamiast ustawiać ją jako „wyłączoną” za każdym razem, gdy tworzysz stronę. To jest możliwe.

Przejdź do Ustawienia >> Dyskusja w sekcji administratora WordPress. W pierwszej sekcji („Domyślne ustawienia artykułów” zobaczysz opcję „Zezwalaj innym na publikowanie komentarzy na temat nowych artykułów” ...) odznacz tę opcję.

Teraz domyślnie komentarze będą wyłączone dla wszystkich nowych postów, stron i niestandardowych typów postów. Nadal możesz włączać komentarze z powrotem „na” dla poszczególnych przypadków, zaznaczając odpowiednie pole wyboru w polu „Dyskusja” na ekranie edycji poszczególnych postów / stron.

EAMann
źródło
1
Istnieje jednak już opcja. Po prostu chcę domyślnie wyłączyć.
Łagodny Fuzz,
1
Istnieje już opcja gdzie? Czy masz na myśli pole „Dyskusja” u dołu ekranu edycji postu / strony?
EAMann
1
Tak, chcę tylko, żeby to nie było zaznaczone. Rozwiązanie Sorich87 prawie działa. Jeszcze nie przy maszynie, żeby coś jeszcze wypróbować.
Łagodny Fuzz,
-2

Jeśli po prostu dodasz ten kod w functions.php

<?php
add_post_type_support( 'your_custom_post_type', array( 'comments' ) );
?>

Przejdź do postu, a w opcjach ekranu zaznacz „Dyskusja” i „Komentarze”, możesz włączyć / wyłączyć komentarze dla każdego niestandardowego typu postu.

kaizer1v
źródło
2
tak naprawdę nie odpowiada na (choć już udzielone) pytanie
Łagodny Fuzz,