Intereting Posts
Возможно ли плагин принудительно считывать и записывать загруженные изображения в базу данных, а не в файловую систему? как получить идентификатор пользователя WordPress при регистрации пользователя Добавить класс в post_class, если более одного сообщения имеют одинаковые значения meta_value_num Изменение домена site_url разбивает ссылки на изображения сложное ограничение элементов в медиа-библиотеке Как добавить контент в конец страницы с помощью крючка? Удерживая 2 wp_user в одном и том же действии (обновить billing_email при обновлении user_email) https redirect hell (добавление www) Подход к созданию сайта с этой структурой Super Socializer: переместите значки общего доступа Изображения не отображаются на iPhone Перенаправление на URL-адрес, если прошло x дней Множественное, вложенное отношение tax_query Как удалить строки-действия из таблицы страниц? Проблема конфигурации меню Primery

Сделать родительские категории недоступными

Я бы хотел, чтобы мои категории, имеющие дочерние категории, не могли быть выбраны на странице статьи статьи.

Я хочу, чтобы удалить флажок перед их меткой.

Я просмотрел документацию по фильму, но не смог найти фильтр, который мне подходит.

Я действительно сомневаюсь, что это можно фильтровать, поэтому jQuery приходит на помощь 🙂

Код

add_action( 'admin_footer-post.php', 'wpse_22836_remove_top_categories_checkbox' ); add_action( 'admin_footer-post-new.php', 'wpse_22836_remove_top_categories_checkbox' ); function wpse_22836_remove_top_categories_checkbox() { global $post_type; if ( 'post' != $post_type ) return; ?> <script type="text/javascript"> jQuery("#categorychecklist>li>label input").each(function(){ jQuery(this).remove(); }); </script> <?php } 

Результат

нет родительских категорий


продвинутый

Существует оговорка: при выборе подкатегории она выходит из иерархии …

Итак, следующий код из отличного плагина Scribu, Дерево контрольных списков категорий , в сочетании с предыдущим кодом.

На экране редактирования сообщений после сохранения сообщения вы заметите, что проверенные категории отображаются сверху, нарушая иерархию категорий. Этот плагин удаляет эту «функцию».

Либо вы используете предыдущий код, либо устанавливаете плагин, либо просто добавляете его в свой файл functions.php или в свой собственный плагин (желательно, чтобы все ваши настройки были независимыми от темы).

 /* Based on Category Checklist Tree, by scribu Preserves the category hierarchy on the post editing screen Removes parent categories checkbox selection */ class Category_Checklist { function init() { add_filter( 'wp_terms_checklist_args', array( __CLASS__, 'checklist_args' ) ); } function checklist_args( $args ) { add_action( 'admin_footer', array( __CLASS__, 'script' ) ); $args['checked_ontop'] = false; return $args; } // Scrolls to first checked category function script() { ?> <script type="text/javascript"> jQuery(function(){ jQuery('[id$="-all"] > ul.categorychecklist').each(function() { var $list = jQuery(this); var $firstChecked = $list.find(':checked').first(); if ( !$firstChecked.length ) return; var pos_first = $list.find(':checkbox').position().top; var pos_checked = $firstChecked.position().top; $list.closest('.tabs-panel').scrollTop(pos_checked - pos_first + 5); }); jQuery("#categorychecklist>li>label input").each(function(){ jQuery(this).remove(); }); }); </script> <?php } } Category_Checklist::init(); 

Почти точно так же, как и брасофило, мой код ниже также учитывает разные таксономии и удаляет флажок для родительских категорий на верхнем уровне, только если у них есть дети. Это позволяет другим категориям верхнего уровня, которые бездетны, по-прежнему можно выбирать. Я поставил этот простой код в файл functions.php моей темы:

 class Category_Checklist { function init() { add_filter( 'wp_terms_checklist_args', array( __CLASS__, 'checklist_args' ) ); } function checklist_args( $args ) { add_action( 'admin_footer', array( __CLASS__, 'script' ) ); $args['checked_ontop'] = false; return $args; } // Scrolls to first checked category function script() { ?> <script type="text/javascript"> (function($){ $('[id$="-all"] > ul.categorychecklist').each(function() { var list = $(this); var firstChecked = list.find(':checked').first(); if ( !firstChecked.length ) return; var pos_first = list.find(':checkbox').position().top; var pos_checked = firstChecked.position().top; list.closest('.tabs-panel').scrollTop(pos_checked - pos_first + 5); }); $(".categorychecklist>li>label input").each(function(){ if ($(this).parent().next('ul').hasClass('children')) { $(this).remove(); } }); })(jQuery); </script> <?php } } Category_Checklist::init(); 

Это также можно сделать с помощью плагина «Дерево контрольных списков категорий», чтобы поддерживать иерархию таксономии, как говорит brasofilo, и некоторые CSS:

 #categorychecklist > li > label.selectit > input { display: none !important; } 

(#categorychecklist можно заменить #yourcustomtaxonomychecklist, чтобы применить это к таксономии custo)

Чтобы добавить это и другие css в wordpress admin, в функции functions.php можно добавить следующее:

 function my_admin_head() { echo '<link rel="stylesheet" type="text/css" href="'.get_bloginfo('stylesheet_directory').'/admin.css">'; } add_action('admin_head', 'my_admin_head'); 

Затем добавьте таблицу стилей «admin.css» в каталог темы и добавьте css выше

Вот что я использовал, чтобы отключить родительские категории и разрешить только одну категорию за сообщение. Этот код также изменяет категории быстрого редактирования. Я приветствую кого-то, чтобы его очистить, я не уверен в javascript.

Я получил первую часть здесь: https://wordpress.org/support/topic/making-category-selection-radio-buttons

  /* ONLY ALLOW ONE CATEGORY PER POST */ add_action( 'admin_footer', 'catlist2radio' ); function catlist2radio(){ echo '<script type="text/javascript">'; echo 'jQuery("#categorychecklist .children input, #categorychecklist-pop .children input, .cat-checklist .children input")'; echo '.each(function(){this.type="radio"});</script>'; } /* DISABLE PARENT CATEGORIES FOR POSTS */ /* Based on Category Checklist Tree, by scribu Preserves the category hierarchy on the post editing screen Removes parent categories checkbox selection */ class Category_Checklist { function init() { add_filter( 'wp_terms_checklist_args', array( __CLASS__, 'checklist_args' ) ); } function checklist_args( $args ) { add_action( 'admin_footer', array( __CLASS__, 'script' ) ); $args['checked_ontop'] = false; return $args; } // Scrolls to first checked category function script() { ?> <script type="text/javascript"> jQuery(function(){ jQuery('[id$="-all"] > ul.categorychecklist').each(function() { var $list = jQuery(this); var $firstChecked = $list.find(':checked').first(); if ( !$firstChecked.length ) return; var pos_first = $list.find(':checkbox').position().top; var pos_checked = $firstChecked.position().top; $list.closest('.tabs-panel').scrollTop(pos_checked - pos_first + 5); }); jQuery("#categorychecklist>li>label input").each(function(){ jQuery(this).remove(); }); }); jQuery(function(){ jQuery('[id$="-all"] > ul.cat-checklist').each(function() { var $list = jQuery(this); var $firstChecked = $list.find(':checked').first(); if ( !$firstChecked.length ) return; var pos_first = $list.find(':checkbox').position().top; var pos_checked = $firstChecked.position().top; $list.closest('.tabs-panel').scrollTop(pos_checked - pos_first + 5); }); jQuery(".cat-checklist>li>label input").each(function(){ jQuery(this).remove(); }); }); jQuery('#category-tabs .hide-if-no-js').remove(); </script> <?php } } Category_Checklist::init(); 

Я использовал комбинацию из вышеперечисленного, чтобы получить мое решение. Мне понравился подход pure css, однако действие щелчка ярлыка все равно изменит атрибут «checked» флажка, даже если он не отображается. Вот мое решение, обратите внимание, что трудно скрыть первые два уровня категорий.

CSS:

 #categorychecklist > li > label.selectit, #categorychecklist > li > ul.children > li > label.selectit {cursor: text;} #categorychecklist > li > label.selectit > input, #categorychecklist > li > ul.children > li > label.selectit > input { display: none !important; } 

js (если флажок скрыт, отмените событие клика. Будет работать на любом уровне):

 $('#categorychecklist > li label.selectit').on('click', function(event) { if (!$(this).children("input").is(':visible')) event.preventDefault(); }); 

И ссылаться на администратора:

 function add_admin_assets() { wp_enqueue_style( "admin-custom-css", get_bloginfo('template_url').'/assets/styles/custom/admin.css'); wp_enqueue_script('admin-custom-js', get_bloginfo('template_url').'/inc/js/admin.js', array(), null, true); } add_action('admin_head', 'add_admin_assets');