WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Хостинг, VPS/VDS и отдельные сервера только на SSD дисках. 7 дней бесплатного тестирования.

Скрыть подкатегории в админке

Было бы удобно для стандартной сортировки woocommerce (перетаскиванием) скрывать подкатегории.

Вопрос заключается в следующем: как временно (функцией) в админке скрывать подкатегории (для любой таксономии)?

1
Александр
11 месяцев назад
  • 0
    Kama7100

    Можно создать фильтр, который будет скрывать все подкатегории. Как добавить фильтры и изменить запрос описано по этой ссылке. Вам нужно будет переделать код под себя...

    tiberium84 11 месяцев назад

    Спасибо! Кажется то что нужно. Когда решу свой вопрос - дам обратную связь.

    tiberium84 11 месяцев назад

    Проверил. Это действительно именно то что нужно! Изменить пришлось только тексономию на product_cat. Спасибо огромное!!! Теперь делать сортировку категорий WC станет легче. Не нужно тянуть через многочисленные подкатегории..

    Kama 11 месяцев назад

    Готовым кодом поделись здесь плз.

    tiberium84 11 месяцев назад

    Это по сути весь твой код!)
    Только я удалил комментарии. И в начале поставил открывающий php чтобы в данном комментарии корректно отображался синтаксис.

    <?php // Переключатель уровня категорий в админке
    
    $taxonomy = 'product_cat';
    
    add_action( "{$taxonomy}_add_form", function($taxonomy){
    	ob_start();
    } );
    
    add_action( "after-{$taxonomy}-table", function($taxonomy){
    	$html = ob_get_clean();
    
    	$__preg_replace_callback = function( $match ){
    		$val = @ $_GET['parent_only'];
    		ob_start();
    		?>
    		<div class="alignleft actions">
    			<select name="parent_only" onchange="window.add_param_to_URL(this)">
    				<option value="">Все уровни...</option>
    				<option value="yes" <?php selected('yes', $val) ?> >Только родители</option>
    			</select>
    		</div>
    		<script>
    
    		window.add_param_to_URL = function(el){
    			var href = window.location.href, sep = /[?]/.test(href) ? "&" : "?", name = el.name.replace(/[^a-z_-]/i,'');
    			window.location = (new RegExp(name+'=?')).test(href) ? href.replace( (new RegExp('([?&]'+name+'=?)[^&]*')), (el.value ? "$1"+ el.value : '') ) : (href + sep + name + "="+ el.value);
    		}
    		</script>
    		<?php
    		return $match[1] . ob_get_clean();
    	};
    
    	echo preg_replace_callback('~(id="doaction[^<]+</div>)~', $__preg_replace_callback, $html );
    } );
    
    add_filter('get_terms_args', 'my_terms_filter_handler');
    function my_terms_filter_handler( $query ){
    
    	if( empty($_GET['parent_only']) || ! is_admin() ) return $query;
    
    	if( ! ( $query['fields'] == 'count' || isset($query['page'])  ) )
    		 return $query;
    
    	$query['parent'] = 0; // только родители
    	return $query;
    }
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация