Intereting Posts
Преобразованный HTML5 в WP, Как применить преобразованные классы к новым страницам (после завершения преобразования) Легкий способ показать выдержки из отдельных сообщений на странице Фильтрация петли для одной страницы и страницы блога Поле GUID в wp_posts – релевантность для вложений? Печать среднего размера изображения Пользовательский тип add Transitions Настройка Word press Admin – добавление функциональных возможностей страницы на другую аналогичную страницу предотвращать появление подкатегорий Сортировка списка таксономии по пользовательским значениям Является ли WordPress хорошим вариантом для этого …? Должно ли родительская страница post_title появляться на дочерней странице с постоянной ссылкой? Разрешить HTML-профиль для избранных пользователей Запрос get_results () не работает только при вводе строк Первые три изображения в выдержке после Использование цикла внутри администратора

Обязательный отрывок для пользовательского типа сообщения

Это является проблемой.

Я пытаюсь сделать выдержку обязательным полем, но только при редактировании / сохранении сообщения в настраиваемом типе сообщений.

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

function mandatory_excerpt($data) { $excerpt = $data['post_excerpt']; if (empty($excerpt)) { if ($data['post_status'] === 'publish') { add_filter('redirect_post_location', 'excerpt_error_message_redirect', '99'); } $data['post_status'] = 'draft'; } return $data; } add_filter('wp_insert_post_data', 'mandatory_excerpt'); function excerpt_error_message_redirect($location) { remove_filter('redirect_post_location', __FILTER__, '99'); return add_query_arg('excerpt_required', 1, $location); } function excerpt_admin_notice() { if (!isset($_GET['excerpt_required'])) return; switch (absint($_GET['excerpt_required'])) { case 1: $message = 'Excerpt is required to publish a post.'; break; default: $message = 'Unexpected error'; } echo '<div id="notice" class="error"><p>' . $message . '</p></div>'; } add_action('admin_notices', 'excerpt_admin_notice'); 

Код добавляет фильтр в wp_insert_post_data :

 add_filter('wp_insert_post_data', 'mandatory_excerpt'); 

И вот обратный вызов:

 function mandatory_excerpt($data) { $excerpt = $data['post_excerpt']; if (empty($excerpt)) { if ($data['post_status'] === 'publish') { add_filter('redirect_post_location', 'excerpt_error_message_redirect', '99'); } $data['post_status'] = 'draft'; } return $data; } 

Обратный вызов фильтра передается $data , который в соответствии с Codex включает следующие данные:

 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_content_filtered', 'post_title', 'post_excerpt', 'post_status', 'post_type', 'comment_status', 'ping_status', 'post_password', 'post_name', 'to_ping', 'pinged', 'post_modified', 'post_modified_gmt', 'post_parent', 'menu_order', 'guid' 

Эти данные включают 'post_type' , что означает, что вы можете использовать это внутри обратного вызова:

 function mandatory_excerpt($data) { if ( 'custom-posttype-slug' != $data['post_type'] ) { return $data; } else { $excerpt = $data['post_excerpt']; if (empty($excerpt)) { if ($data['post_status'] === 'publish') { add_filter('redirect_post_location', 'excerpt_error_message_redirect', '99'); } $data['post_status'] = 'draft'; } } return $data; } 

Решение проблемы с сообщениями, которые невозможно удалить или даже опубликовать, добавляет дополнительную проверку, чтобы убедиться, что функция mandatory_excerpt() запускается только при отсутствии $_GET['action'] . В противном случае функция всегда будет возвращать ошибку при удалении сообщения или изменении статуса публикации.

Таким образом, измененная функция будет:

 function mandatory_excerpt($data) { if ( 'custom-post-type-here' != $data['post_type'] || $_GET['action'] ) { return $data; } else { $excerpt = $data['post_excerpt']; if (empty($excerpt)) { if ($data['post_status'] === 'publish') { add_filter('redirect_post_location', 'bstcm_excerpt_error_message_redirect', '99'); } $data['post_status'] = 'draft'; } } return $data; } 

Мне не хватает репутации на этом сайте, чтобы комментировать.

Обратите внимание, что код, который вы используете, не имеет соответствующих проверок для статуса сообщения. В результате ваша панель управления администратора заполнит множество Auto Drafts, которые обычно пусты, которые никогда не будут очищены.

Простое решение – сделать что-то вроде:

  function mandatory_excerpt($data) { if (empty($data['post_excerpt']) && $data['post_type'] != 'custom-post-type' && !isset($_GET['action'])) { if ($data['post_status'] === 'publish') { add_filter('redirect_post_location', 'excerpt_error_message_redirect', '99'); } if ($data['post_status'] == 'publish' || $data['post_status'] == 'future' || $data['post_status'] == 'pending') { $data['post_status'] = 'draft'; } } return $data; }