Intereting Posts
Показать все сообщения из категории с и без условий в хронологическом порядке Добавление URL-адреса в изображения JPEG в сообщениях Запросить сообщения с использованием пользовательской таксономии и выбранных терминов В каких файлах журнала записывается установка WordPress? Уровень детализации управления WP DEBUG? add_rewrite_rule и настраиваемая переменная Как я могу получить изображение из каталога uploads и ввести его в медиа-библиотеку? Как показать содержимое сообщения, прежде чем читать больше тегов (выдержка) для сообщений с защитой паролем? Плагин Forum, который позволяет частным группам приглашать только Как я могу получить идентификатор страницы блога, когда параметр «Параметры главной страницы» установлен в «Ваши последние сообщения», get_header () не определен после использования template_include Странные проблемы после восстановления после нарушения безопасности Локализованная версия предлагает обновление до версии en-us Расширенные пользовательские поля – Отправка сообщений для запроса foreach Добавленные поля в окне быстрого редактирования необходимо обновить в настоящий момент

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 ), и если такие конкретные срок удаляется, вы можете вставить его еще раз …

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