Функция / Класс для отображения категорий с помощью флажков

Мне нужен список, как на картинке; ведьма здесь – Сообщения-> Новые-> Выбрать категории

WordPress Добавить новое сообщение, Категории

На данный момент у меня есть это

echo '<select name="pn-cats[]" size="8" style="width: 100%" multiple>'; $args = array( 'type' => 'post', 'child_of' => 0, 'parent' => '', 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => 0, 'hierarchical' => 1, 'exclude' => '', 'include' => '', 'number' => '', 'taxonomy' => 'category', 'pad_counts' => false ); $categories = get_categories( $args ); foreach ($categories as $category) { $option = '<option value="'.$category->cat_name.'">'; $option .= $category->cat_name; $option .= ' ('.$category->count.')'; $option .= '</option>'; echo $option; } echo '</select>'; 

Но мне не нравится мое решение, потому что категории не сортируются, как parent-> child на картинке. Мне нужен список с несколькими вариантами выбора.

Знаете ли вы какое-либо решение? wp_category_checklist не работает, потому что мне нужен этот список на общедоступной странице, а не в области администратора.

Solutions Collecting From Web of "Функция / Класс для отображения категорий с помощью флажков"

Вы можете сделать wp_category_checklist () доступным в любом из ваших шаблонов, используя:

 require_once( ABSPATH . '/wp-admin/includes/template.php' ); wp_category_checklist(); 

Если вы хотите иметь для него короткий код, который анализирует доступные аргументы, вот пример:

  add_shortcode('frontend-category-checklist', 'frontend_category_checklist'); function frontend_category_checklist($atts) { // process passed arguments or assign WP defaults $atts = shortcode_atts( array( 'post_id' => 0, 'descendants_and_self' => 0, 'selected_cats' => false, 'popular_cats' => false, 'checked_ontop' => true ), $atts, 'frontend-category-checklist' ); // string to bool conversion, so the bool params work as expected $atts['selected_cats'] = to_bool( $atts['selected_cats'] ); $atts['popular_cats'] = to_bool( $atts['popular_cats'] ); $atts['checked_ontop'] = to_bool( $atts['checked_ontop'] ); // load template.php from admin, where wp_category_checklist() is defined require_once( ABSPATH . '/wp-admin/includes/template.php' ); // generate the checklist ob_start(); ?> <div class="categorydiv"> <ul class="category-tabs"> <div id="taxonomy-category" class="categorydiv"> <div id="category-all" class="tabs-panel"> <ul id="categorychecklist" data-wp-lists="list:category" class="categorychecklist form-no-clear"> <?php wp_category_checklist( $atts['post_id'], $atts['descendants_and_self'], $atts['selected_cats'], $atts['popular_cats'], null, $atts['checked_ontop'] ); ?> </ul> </div> </div> </ul> </div> <?php return ob_get_clean(); } function to_bool($bool) { return ( is_bool($bool) ? $bool : ( is_numeric($bool) ? ((bool)intval($bool)) : $bool !== 'false' ) ); } 

Теперь вы можете использовать [frontend-category-checklist] на любой странице или на почте. Все аргументы работают, за исключением $walker .

Обновленный ответ: я сделал скрипку с объемным CSS, который вам нужен, чтобы сделать его похожим на список на панели инструментов. Флажки не работают правильно в скрипке, но они работают с интерфейсом WordPress (4.1). Вы можете очистить CSS правил, которые вам действительно не нужны, у меня не было на это времени.

Обратите внимание, что я также обновил функцию в ответе, чтобы создать еще несколько html в списке. Вероятно, вы должны заменить старый код на новый.