WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Шаблоны сайтов на русском

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

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

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

1
Александр
1.2 года назад
  • 0
    Kama7363

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

    tiberium84 1.2 года назад

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

    tiberium84 1.2 года назад

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

    Kama 1.2 года назад

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

    tiberium84 1.2 года назад

    Это по сути весь твой код!)
    Только я удалил комментарии. И в начале поставил открывающий 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;
    }
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация