Intereting Posts
Получение изображений / мультимедиа, прикрепленных к идентификатору страницы за страницей Разбиение страниц на странице archive.php Должен ли я remove_filter заменять фильтр? Фильтр pre_comment_content не работает с использованием IntenseDebate Усовершенствованная модерация Ошибка – на главной странице, а не на персонализированном типе сообщений Проблема разбиения на страницы (плагин wp-pagenavi) с пользовательским типом сообщения? Глобальная переменная $ post возвращает неверный объект Получить источник из the_post_thumbnail вернуть раздел содержимого в json в wp rest api v1 Запрошенные URL-адреса при использовании пользовательского правила перезаписи Изменить WooCommerce tax_string в электронной почте Изменить панель администратора по умолчанию: выкл. Почему на каждой странице добавлена ​​ссылка stylesStyles-css stylesheet? у пользователя есть разрешение на чтение настраиваемого сообщения, но оно не отображается в плагине wordpress Порядок WP_Query по количеству понравившихся

Выпадающее меню с несколькими уровнями

Я использую WordPress как CMS и хотел бы иметь категории, выбираемые из нескольких вариантов, т.е. <option> .

введите описание изображения здесьвведите описание изображения здесь

В качестве примера использования первый раскрывающийся список будет содержать родительские категории. Затем, выбрав родительский элемент, вы увидите всплывающее раскрытие с дочерними категориями. На WordPress.org есть несколько плагинов, но все они кажутся сломанными или устаревшими. Любая помощь будет оценена по достоинству.

Сломанный плагин http://wordpress.org/extend/plugins/ajax-category-dropdown/

Код, который я использую из wordpress.org

 <form action="<?php bloginfo('url'); ?>/" method="get"> <?php $select = wp_dropdown_categories('orderby=name&echo=0&depth=0&hierarchical=1&exclude=5,4'); $select = preg_replace("#<select([^>]*)>#", "<select$1 onchange='return this.form.submit()'>", $select); echo $select; ?> <noscript><input type="submit" value="View" /></noscript> </form> 

Solutions Collecting From Web of "Выпадающее меню с несколькими уровнями"

 function parent_child_cat_select() { ?> <script type="text/javascript"> /* <![CDATA[ */ jQuery(document).ready(function() { jQuery('#parent_cat').change(function(){ var parentCat=jQuery('#parent_cat').val(); // call ajax jQuery.ajax({ url:"/wp-admin/admin-ajax.php", type:'POST', data:'action=category_select_action&parent_cat_ID=' + parentCat, success:function(results) { jQuery("#sub_cat_div").html(results); } }); }); }); /* ]]> */ </script> <form action="<?php bloginfo('url'); ?>/" method="get"> <div id="parent_cat_div"><?php wp_dropdown_categories("show_option_none=Select parent category&orderby=name&depth=1&hierarchical=1&id=parent_cat"); ?></div> <div id="sub_cat_div"><select name="sub_cat_disabled" id="sub_cat_disabled" disabled="disabled"><option>Select parent category first!</option></select></div> <div id="submit_div"><input type="submit" value="View" /></div> </form> <?php } function implement_ajax() { $parent_cat_ID = $_POST['parent_cat_ID']; if ( isset($parent_cat_ID) ) { $has_children = get_categories("parent=$parent_cat_ID"); if ( $has_children ) { wp_dropdown_categories("orderby=name&parent=$parent_cat_ID"); } else { ?><select name="sub_cat_disabled" id="sub_cat_disabled" disabled="disabled"><option>No child categories!</option></select><?php } die(); } // end if } add_action('wp_ajax_category_select_action', 'implement_ajax'); add_action('wp_ajax_nopriv_category_select_action', 'implement_ajax');//for users that are not logged in. //this is optional, only if you are not already using jQuery function load_jquery() { wp_enqueue_script('jquery'); } add_action('init', 'load_jquery'); 

Для отображения раскрывающихся меню используйте parent_child_cat_select() .

 <?php parent_child_cat_select(); ?> 
 <form action="<?php echo remove_query_arg(array('mycat_go', 'cat')); ?>" method="get"> <?php // get selected category and do some initializations if (isset($_REQUEST['cat'])) $_REQUEST['mycat_go'] = $_REQUEST['cat']; $selected = $_REQUEST['mycat_go']; $selects = array(); $last = 0; $top = false; $i = 0; // basically, we are looping from the selected up through the parents // till we have no parent anymore. while (!$top) { // prep query to generate field containing all child categories // of the selected one $args = array( 'name' => 'mycat_'.$i, 'orderby' => 'name', 'echo' => 0, 'hierarchical' => 1, 'exclude' => '4,5', 'child_of' => $selected, 'depth' => 1, 'show_option_none' => '--select--', 'hide_if_empty' => true, ); if(!empty($last)) $args['selected'] = $last; // prepare next loop iteration or stop if we are displaying children of 0 if (!empty($selected)) { $last = $selected; $category = get_category($selected); $selected = $category->parent; } else { $top = true; } // generate output and store in reversed order as we are going bottom up $select = wp_dropdown_categories($args); $select = preg_replace("#<option([^>]*)>#", "<option$1 onclick=\"this.parentNode.name = 'mycat_go';return this.form.submit()\">", $select); array_unshift($selects, $select); $i++; } // print to screen foreach ($selects as $select) { echo $select; } ?> </form> <form action="<?php remove_query_arg(array('mycat_go', 'cat')); ?>" method="get"> <input type="hidden" name="cat" value="<?php echo $_REQUEST['mycat_go']; ?>" /> <input type="submit" value="Go there" /> </form> 

Может использовать некоторую полировку, но должен работать.