TopdiR
@TopdiR
PHP/WordPress developer

Как сделать вывод выпадающего меню с подкатегориями на странице категории WooCommerce?

Здравствуйте уважаемые специалисты!

Есть задача на странице категории WooCommerce вывести выпадающее меню с подкатегориями данной категории. Подойдет любое решение с помощью кода или плагина.
  • Вопрос задан
  • 13132 просмотра
Пригласить эксперта
Ответы на вопрос 4
Комментировать
@Mad-cote
Ну, возможно моё решение не в тему будет немного, но если надо вывести в каждой div категории свои подкатегории, то решение очень простое:

На странице wc-template-functions.php
function woocommerce_subcategory_list($category) {

    $product_categories = get_categories( apply_filters( 'woocommerce_product_subcategories_args', array(
        'child_of'       => $category->term_id ,
        'menu_order'   => 'ASC',
        'hide_empty'   => 0,
        'hierarchical' => 1,
        'taxonomy'     => 'product_cat',
        'pad_counts'   => 1
    ) ) );


    echo "<ul>";
    foreach($product_categories as $product) {
        echo "<li>$product->name</li>";
    }
    echo "</ul>";
}


На странице wc-template-hooks.php
add_action ( 'woocommerce_sub_list', 'woocommerce_subcategory_list', 20);


И потом в нужное место (например в content-product_cat.php) вставляем:
do_action( 'woocommerce_sub_list', $category);
Ответ написан
TopdiR
@TopdiR Автор вопроса
PHP/WordPress developer
@zelenin, cпасибо за подсказку.

Я нашел на GitHub код, который отображает почти то что мне надо:
<?php

add_shortcode( 'product_categories_dropdown', 'woo_product_categories_dropdown' );
 
function woo_product_categories_dropdown( $atts ) {
 
  extract(shortcode_atts(array(
    'count'         => '1',
    'hierarchical'  => '1',
    'orderby' 	    => ''
    ), $atts));
	
	ob_start();
	
	$c = $count;
	$h = $hierarchical;
	$o = ( isset( $orderby ) && $orderby != '' ) ? $orderby : 'order';
		
	// Stuck with this until a fix for http://core.trac.wordpress.org/ticket/13258
	woocommerce_product_dropdown_categories( $c, $h, 0, $o );
 
	?>
	<script type='text/javascript'>
	/* <![CDATA[ */
		var product_cat_dropdown = document.getElementById("dropdown_product_cat");
		function onProductCatChange() {
			if ( product_cat_dropdown.options[product_cat_dropdown.selectedIndex].value !=='' ) {
				location.href = "<?php echo home_url(); ?>/?product_cat="+product_cat_dropdown.options[product_cat_dropdown.selectedIndex].value;
			}
		}
		product_cat_dropdown.onchange = onProductCatChange;
	/* ]]> */
	</script>
	<?php
	
	return ob_get_clean();


Он выводит все категории магазина WooCommerce с подкатегориями в селекте. Если можете помочь мне модифицировать его чтобы в селекте выводились только подкатегории текущей категории - я буду Вам очень благодарен.
Ответ написан
TopdiR
@TopdiR Автор вопроса
PHP/WordPress developer
@zelenin, применив и модифицировав код из примера для функции get_terms я получаю список всех категорий, а не дочерних. Проблема в аргументе child_of ? Укажите, пожалуйста, на мою ошибку.

<?php
$args = array( 'child_of' => $current_term->term_id, 'orderby' => 'name', 'order' => 'ASC' );
$terms = get_terms( 'product_cat', $args );
$count = count($terms);
 if($count > 0){
     echo "<ul>";
     foreach ($terms as $term) {
       echo "<li>".$term->name."</li>";

     }
     echo "</ul>";
 }
?>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 12:53
1000 руб./за проект
19 апр. 2024, в 12:41
8000 руб./за проект
19 апр. 2024, в 12:05
1500 руб./в час