Intereting Posts
Как я могу показать другое меню для разных страниц? Регистрационная форма Shortcode Получение элемента темы в редакторе страниц плагинов в wp admin Каков наиболее эффективный метод базы данных для добавления и запроса usermeta? WordPress не позволяет автоматически обрезать изображения Как обрабатывать запросы администратора и паролей от разработчиков плагинов? Массовое обновление пользовательского типа сообщений сразу в wordpress Отфильтровать / удалить элементы HTML на всех страницах и страницах Состояние Else не работает при использовании has_post_thumbnail Редактировать результаты изображения в копиях создаваемого файла Как разместить несколько галерей изображений в одном посте? как фильтровать каждый элемент тега? как установить значения полей по умолчанию в новой форме сообщения в админах panal Импорт XML в WordPress, проблема с permalink add_action и remove_action, если пользовательское поле существует

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

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