Intereting Posts
Как сопоставить мои php-файлы как файлы для страниц Показать изображение EXIF ​​info WordPress добавляет rel = "nofollow" и target = "_ blank" во внутренние ссылки в сообщениях и страницах Список сообщений с выделенными категориями в списке всех категорий на single.php Операции с настраиваемыми значениями полей в цикле Страница портфолио для классических сообщений Изменить порядок полей полей пользовательского типа на странице администрирования Можно ли отключить определенные роли пользователей от создания тегов? Как добавить nofollow на весь сайт Как продлить плагин WordPress без потери ваших изменений Как я могу исправить: «Примечание: неопределенное смещение: 0»? Включение файлов PHP не работает за пределами Localhost Ошибки SSL при активации моей настраиваемой темы Переходный режим не работает для внешних данных Перенаправление (разоблачение) внешнего домена на многосайтовый сайт при сохранении пути

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

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

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

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

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

Solutions Collecting From Web of "Обязательный отрывок для пользовательского типа сообщения"

Код добавляет фильтр в 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; }