@tbalero

Как отобразить форму для ввода комментариев на странице записи произвольного типа?

На вордпресс-сайте зарегистрирован произвольный тип записей: movies
Создан шаблон single-movies.php для отдельной страницы записи типа "movies"

*Регистрация произвольного типа записей "movies" осуществлена с помощью кода (в файле functions.php):

add_action('init', 'my_custom_init');
function my_custom_init()
{
// Регистрация произвольного типа записей "movies"
$labels = array(
'name' => 'Фильмы', // Основное название типа записи
'singular_name' => 'Фильм', // отдельное название записи типа movies
'add_new' => 'Добавить новый',
'add_new_item' => 'Добавить новый Фильм',
'edit_item' => 'Редактировать Фильм',
'new_item' => 'Новый Фильм',
'view_item' => 'Посмотреть Фильм',
'search_items' => 'Найти Фильм',
'not_found' => 'Фильмов не найдено',
'not_found_in_trash' => 'В корзине Фильмов не найдено',
'parent_item_colon' => '',
'menu_name' => 'Фильмы'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','thumbnail','excerpt','comments')
);
register_post_type('movies',$args);
// Регистрация произвольного типа записей "movies"
// end
}
// Добавляем фильтр, который изменит сообщение при публикации при изменении типа записи movies
add_filter('post_updated_messages', 'movies_updated_messages');
function movies_updated_messages( $messages ) {
global $post, $post_ID;

$messages['movies'] = array(
0 => '', // Не используется. Сообщения используются с индекса 1.
1 => sprintf( 'movies обновлено. Посмотреть запись movies', esc_url( get_permalink($post_ID) ) ),
2 => 'Произвольное поле обновлено.',
3 => 'Произвольное поле удалено.',
4 => 'Запись movies обновлена.',
/* %s: дата и время ревизии */
5 => isset($_GET['revision']) ? sprintf( 'Запись movies восстановлена из ревизии %s', wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
6 => sprintf( 'Запись movies опубликована. Перейти к записи movies', esc_url( get_permalink($post_ID) ) ),
7 => 'Запись movies сохранена.',
8 => sprintf( 'Запись movies сохранена. Предпросмотр записи movies', esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
9 => sprintf( 'Запись movies запланирована на: %1$s. Предпросмотр записи movies',
// Как форматировать даты в PHP можно посмотреть тут: php.net/date
date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
10 => sprintf( 'Черновик записи movies обновлен. Предпросмотр записи movies', esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
);

return $messages;
}

// показ раздела "помощь" для типа записей movies
add_action( 'contextual_help', 'add_help_text', 10, 3 );

function add_help_text($contextual_help, $screen_id, $screen) {
//$contextual_help .= var_dump($screen); // используйте чтобы помочь определить параметр $screen->id
if ('movies' == $screen->id ) {
$contextual_help =
'Напоминалка при редактировании записи movies:
Указать нужную информацию.
Если нужно запланировать публикацию на будущее:
В блоке с кнопкой "опубликовать" нажмите редактировать дату.
Измените дату на нужную, будущую и подтвердите изменения кнопкой ниже "ОК".
';
} elseif ( 'edit-movies' == $screen->id ) {
$contextual_help =
'Это раздел помощи, показанный для типа записи movies' ;
}
return $contextual_help;
}


Для того, чтобы отобразить форму для ввода комментариев на странице записи произвольного типа "movies", - в шаблоне single-movies.php добавляем стандартную функцию: <?php comments_template(); ?>

В результате на отдельной странице записи типа "movies" вместо формы для ввода комментариев - отображается текст: Обсуждение закрыто.
*При этом в случае с записями стандартного типа - при использовании функции <?php comments_template(); ?> - корректно отображается форма для ввода комментариев.

*В админке во вкладке "Настройки обсуждения" - установлена галочка "Разрешить оставлять комментарии на новые статьи"
*Не установлена галочка "Автоматически закрывать обсуждение статей старше 14 дней"
*Не установлена галочка "Пользователи должны быть зарегистрированы и авторизованы для комментирования."

*В админке непосредственно на странице редактирования записи произвольного типа - отображается блок "Обсуждение". В нем есть два чекбокса: "Разрешить комментарии." ; "Разрешить обратные ссылки и уведомления."
По умолчанию в чекбоксе "Разрешить комментарии." - галочка не поставлена.
Если галочку поставить вручную - то тогда на странице записи произвольного типа "movies" форма для ввода комментариев отобразится корректно. Однако форма для ввода комментариев отобразится только на странице одной конкретной записи, для которой в админке вручную поставили галочку в чекбоксе "Разрешить комментарии.", а не на всех страницах записей произвольного типа "movies".

Вопрос - как сделать, чтобы в чекбоксе "Разрешить комментарии." галочка была бы по умолчанию проставлена для всех записей произвольного типа "movies" ? (чтобы форма для ввода комментариев отображалась бы по умолчанию на страницах записей произвольного типа?
  • Вопрос задан
  • 402 просмотра
Решения вопроса 1
Apathetic
@Apathetic
Frontend
1) Убедитесь, что в register_post_type в параметре 'supports' прописано 'comments' (https://codex.wordpress.org/Function_Reference/reg... )
2) Во вкладке "настройки обсуждения" (да, в той, про которую вы написали), снимите галочку, сохраните, поставьте галочку, сохраните.
UPD:
3) Автоматическое включение комментариев для новых записей:
add_filter( 'wp_insert_post_data', 'toster256163_comments_on' );
function toster256163_comments_on( $post_data ) {
    if ( $post_data['post_type'] === 'movies' ) {
        $post_data['comment_status'] = 'open';
    }
    return $post_data;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы