Intereting Posts
Показать сообщения с комментариями закрытыми, с разбивкой на страницы? Проблема с родительской страницей WordPress Исключение сообщений из определенной категории из следующих и предыдущих сообщений Пользовательские типы сообщений и постоянная ссылка Получать содержание страницы для отображения в Bootstrap Modal Отображение иерархической пользовательской таксономии Как я могу получить идентификатор комментария при отправке? Как удалить крючок действия s2member Использование короткого кода для пересылки сообщений из нескольких категорий Могу ли я назначать приоритеты для категорий сообщений для выбора для тропы для панировки? Изменение миниатюры темы для обрезанного WP-изображения Показать DISQUS на главной странице Как перенаправить почтовый url на собственный URL? WordPress Постоянная ссылка на знак вопроса (?) В URL-адресе Короткий код для отображения цикла

Multisite – защищать категории от удаления?

UPDATE: для тех, кто следует этой теме, решение плагина работает, но, похоже, проблема в моем многоуровневом формате. Сейчас я тестировал три отдельных установки и 3 мультисайта. На мультисайтах красный маркер «undeletable» появляется рядом с категориями в массиве, но их можно удалить. Это может свести к проблеме с моей конкретной установкой, поскольку она работает правильно с недавно созданными дочерними узлами.

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

Я уже использую плагин «members» для определения ролей администратора, но единственный вариант – «управлять категориями», и если я отключу эту возможность, они не смогут удалить категории, но они также не могут создавать новые.

Любой способ разрешить новые категории, но не удалять несколько специальных?

Solutions Collecting From Web of "Multisite – защищать категории от удаления?"

Расширение ответа Романа.


В среде Multisite было разработано и протестировано следующее: локальная и живая установка WP.


Если посмотреть на источник wp_delete_term , есть некоторые крючки, которые запускаются при вызове функции.

Я не уверен, что это лучший способ сделать это, но он работает.

 add_action( 'delete_term_taxonomy', 'wpse_70758_del_tax', 10, 1 ); function wpse_70758_del_tax( $tt_id ) { $undeletable = array( 'undeletable', 'uncategorized', 'other-cat' ); $term = get_term_by( 'id', $tt_id, 'category' ); if( in_array( $term->slug, $undeletable ) ) wp_die( 'cant delete' ); } 

Таким образом, при попытке удалить категорию «Undeletable» (используя меню быстрого редактирования ), она производит:

не может удалить категорию

Поскольку удаление происходит через Ajax, мы прерываем его выполнение, а WP выгружает это сообщение об ошибке (изменение этого текста заслуживает отдельного Вопроса).

Если мы используем « Массовые действия », то wp_die() будет напечатано на экране.


Но это не все. Перед фактическим удалением (action hook delete_term_taxonomy ) дочерние категории блокировки «unparented», строка # 1772 :

// Обновление дочерних элементов для указания нового родителя

Есть еще один крюк, где это действие происходит, и мы можем вставить ранний прорыв, чтобы предотвратить «unparenting»:

 add_action( 'edit_term_taxonomies', 'wpse_70758_del_child_tax', 10, 1 ); function wpse_70758_del_child_tax( $arr_ids ) { $undeletable = array( 'undeletable', 'uncategorized', 'other-cat' ); foreach( $arr_ids as $id ) { $term = get_term_by( 'id', $id, 'category' ); $parent = get_term_by( 'id', $term->parent, 'category' ); if( in_array( $parent->slug, $undeletable ) ) wp_die( 'cant delete' ); } } 

Используйте это внутри плагина Must Use и он будет автоматически активирован в сети.


Снимок выше имеет собственный столбец идентификатора в списке категорий. Это делается со следующим кодом (здесь с дополнительным столбцом, обозначающим категории «undeletable» с большой красной пулей):

 add_filter( 'manage_edit-category_columns', 'wpse_70758_cat_edit_columns' ); add_filter( 'manage_category_custom_column', 'wpse_70758_cat_custom_columns', 10, 3 ); function wpse_70758_cat_edit_columns( $columns ) { $columns['tt_id'] = 'ID'; $columns['undeletable'] = 'Undeletable'; return $columns; } function wpse_70758_cat_custom_columns( $value, $name, $tt_id ) { if( 'tt_id' == $name ) echo $tt_id; $term = get_term_by( 'id', $tt_id, 'category' ); $undeletable = array( 'undeletable', 'uncategorized', 'other-cat' ); if( 'undeletable' == $name && in_array( $term->slug, $undeletable ) ) echo '<span style="color:#f00;font-size:5em;line-height:.5em">&#149;</span>'; } 

Полный рабочий плагин: https://gist.github.com/4110831

Maybee вы можете подключиться к функции wp_delete_term с действием «delete_term» (см. Информацию по адресу: http://adambrown.info/p/wp_hooks/hook/delete_term?version=3.4&file=wp-includes/taxonomy.php ), и если такие конкретные срок удаляется, вы можете вставить его еще раз …

это не так чистое решение, и пользователи будут немного удивлены, что термин остается по-прежнему после того, как они нажали «удалить ссылку», но он может выполнить эту работу, на самом деле я думаю, что это только решение …