Как ограничить количество меток при создании поста?

Ссылка скопирована
1 ответ

Есть ли способ ограничить количество добавляемых меток к статье при публикации? Именно не выводить, а запретить добавлять более, допустим, 3-х меток к записи. Чтобы пользователи, которые публикуют, не жестили с метками.

Дополнительно:

Оффтоп: забавно, что подобное ограничение не помешало бы и здесь, а то некоторые как наставят тегов каких попало, так модераторы за голову хватаются XD

Ответы:

Конечно, через WordPress Hooks

function limit_post_tags($postarr) {     $tags = isset($postarr['tags_input']) ? explode(',', $postarr['tags_input']) : array();          // Установите максимальное количество меток     $max_tags = 3;      if (count($tags) > $max_tags) {         // Если количество меток превышает максимальное, удалите лишние         $postarr['tags_input'] = implode(',', array_slice($tags, 0, $max_tags));     }      return $postarr; } add_filter('wp_insert_post_data', 'limit_post_tags');

function limit_post_tags($postarr) { $tags = isset($postarr['tags_input']) ? explode(',', $postarr['tags_input']) : array(); // Установите максимальное количество меток $max_tags = 3; if (count($tags) > $max_tags) { // Если количество меток превышает максимальное, удалите лишние $postarr['tags_input'] = implode(',', array_slice($tags, 0, $max_tags)); } return $postarr; } add_filter('wp_insert_post_data', 'limit_post_tags');

Или плагины:
1. "Tag Limit" (https://wordpress.org/plugins/tag-limit/): Этот плагин позволяет вам установить максимальное количество меток, которые могут быть добавлены к посту.

2. "Term Management Tools" (https://wordpress.org/plugins/term-management-tools/): Этот плагин предоставляет дополнительные функции управления терминами (включая метки).

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Сергей Миронов Ответ

Ограничивать количество меток лучше не только «обрезанием» при сохранении, а с понятной ошибкой для автора. Иначе пользователь добавит 10 меток, WordPress молча сохранит 3, и это будет выглядеть как баг. Для классического сохранения можно использовать хук save_post или wp_insert_post_data, но в Gutenberg часть данных приходит через REST API, поэтому нужна проверка и на сервере.

Простой серверный вариант: после сохранения оставить не больше 3 меток у обычных записей:

add_action('save_post_post', function ($post_id, $post, $update) {
    if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) {
        return;
    }
 
    $terms = wp_get_post_terms($post_id, 'post_tag', ['fields' => 'ids']);
 
    if (count($terms) > 3) {
        wp_set_post_terms($post_id, array_slice($terms, 0, 3), 'post_tag', false);
    }
}, 20, 3);

add_action('save_post_post', function ($post_id, $post, $update) { if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) { return; } $terms = wp_get_post_terms($post_id, 'post_tag', ['fields' => 'ids']); if (count($terms) > 3) { wp_set_post_terms($post_id, array_slice($terms, 0, 3), 'post_tag', false); } }, 20, 3);

Это безопасно, но молча удаляет лишние метки. Если нужен запрет до сохранения с сообщением, для Gutenberg придётся добавить JS-проверку в редакторе или REST validation. Для фронтенд-формы публикации проще: перед wp_insert_post() посчитать выбранные теги и вернуть ошибку пользователю.

Если публикации создают авторы/контрибьюторы, также проверьте права на создание новых меток. Иногда достаточно запретить им создавать новые теги и оставить выбор только из заранее подготовленного списка.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно