отключить комментарии по умолчанию для страниц и пользовательских типов записей?

20

Я хочу отключить комментарии по умолчанию с помощью страниц и пользовательских типов записей

Первоначально я просто использовал условные выражения в функции отображения комментариев, чтобы избежать отображения блока на этих страницах, но мне нужно, чтобы пользователь мог включать комментарии обратно по мере необходимости.

Мягкий пух
источник
1
Просто дружеское напоминание, я добавил ответ на этот вопрос, который, как мне кажется, дает желаемый эффект ..
t31os
1
Я уверен, что ваша функция работает хорошо, но я уже выбрал ответ, который подходит для моих целей.
Мягкий пух
Примечание: связанный билет Trac # 12991
Чип Беннетт

Ответы:

9

Из того, что я понимаю, вы хотите, чтобы на страницах и некоторых пользовательских типах комментариев было по умолчанию «отключено», в то время как в сообщениях по-прежнему будет использоваться опция по умолчанию (т. Е. Комментарии «включены»). Если это так, то следующая функция сделает это.

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
источник
1
это не удается, если вы хотите снова включить комментарии. Его нужно отредактировать так, чтобы он запускался только один раз
Mild Fuzz
1
не на машине сейчас, но я думаю, что вы можете использовать механику метаданных для проверки мета, если там не запущена функция, иначе добавьте мета и запустите функцию.
Мягкий пух
1
протестировано, это не будет работать так просто, потому что идентификатор поста не содержится в переменной $ data в вашей функции.
Мягкий пух
1
Я протестировал его (с WP 3.0) перед отправкой своего ответа, и это сработало. С какой проблемой вы сталкиваетесь? Идентификатор поста отсутствует в $ data, потому что пост еще не был создан до запуска функции (посмотрите фильтр в функции wp_insert_post). Функция будет работать только при посещении wp-admin / post-new.php? Post-type = xxx, прежде чем вводить какой-либо контент в поля.
sorich87
1
на моем тестовом сервере я не могу снова включить комментарии, они постоянно отключены.
Мягкий пух
10

Когда вы создаете новый пост (пользовательский тип или обычный), WordPress вызывает, get_default_post_to_editкоторый затем устанавливает значения по умолчанию для нового поста.

Эта функция предоставляет несколько хуков фильтров для изменения заголовка, содержимого и выдержки по умолчанию, но, к сожалению, ничего другого ... однако каждый фильтр передает весь $postобъект к обратному вызову, по сути это означает, что можно переопределить несколько свойств (или только одно, если нам нравится)

Это должно работать для вас, просто добавьте типы сообщений, к которым должен применяться код, в качестве случаев внутри переключателя .. (фильм и страница - примеры) ..

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

Код был протестирован на WP 3.0.1 и имел желаемый эффект отключения комментариев для типов сообщений, в то же время оставляя другим наследовать статус по умолчанию из default_comment_statusопции.

Надеюсь, это поможет.... :)

t31os
источник
2

Я написал плагин для отключения комментариев на страницах по умолчанию. http://wordpress.org/extend/plugins/page-comments-off-please/

Возможно, это поможет?


источник
1
кажется чрезмерным, учитывая решение в 5 строк в ответе sorich87! Ура, хотя.
Мягкий пух
1
Не совсем, есть много подходов к решению требований к коду, это просто другой метод.
t31os
1

Согласно этой теме , то, что вы запрашиваете, невозможно без использования специального плагина или функции для его выполнения.

Трэвис Норткатт
источник
1
У меня нет проблем с написанием одного, просто нужно указать в правильном направлении. Крючки и фильтры и т.д., которые могут помочь.
Мягкий пух
1
Если вы в конечном итоге напишите один, пожалуйста, поделитесь тем, что вы сделали здесь! Похоже, плагин, который может сделать это будет много полезного.
Трэвис Норткатт
1

Я бы порекомендовал по-прежнему использовать ваши условные выражения на экране комментариев, но используйте параметры для сохранения ваших условных настроек. Затем вы можете добавить страницу в меню «Настройки», которая позволяет администраторам включать или выключать комментарии по мере необходимости.


Обновить

Мне приходит в голову, что вы хотите установить значение по умолчанию для комментариев как «выключено» как глобальный параметр, а не устанавливать его как «выключено» каждый раз, когда вы создаете страницу. Это является возможным.

Перейдите в Настройки >> Обсуждение в разделе администратора WordPress. В первом разделе («Настройки статьи по умолчанию» вы увидите опцию «Разрешить людям оставлять комментарии к новым статьям» ... снимите этот флажок).

Теперь по умолчанию комментарии будут отключены для всех новых сообщений, страниц и пользовательских типов сообщений. Вы по-прежнему можете возвращать комментарии «вкл.» В каждом конкретном случае, установив соответствующий флажок в мета-поле «Обсуждение» на отдельном экране редактирования поста / страницы.

EAMann
источник
1
Там уже есть возможность. Я просто хочу отключить его по умолчанию.
Мягкий пух
1
Уже есть вариант где? Вы имеете в виду поле «Обсуждение» в нижней части экрана редактирования сообщения / страницы?
EAMann
1
Да, я просто хочу, чтобы это было снято. Решение Sorich87 почти работает. Не в машине, чтобы попробовать что-нибудь еще.
Мягкий пух
-2

Если вы просто добавите этот код в functions.php

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

Перейдите к сообщению, и в опциях экрана, отметьте «Обсуждение» и «Комментарии», вы можете включить / отключить комментарии для каждого пользовательского типа сообщения.

kaizer1v
источник
2
на самом деле не отвечает (хотя и уже ответил) на вопрос
Mild Fuzz