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

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

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

1
Александр
7.1 год назад
  • 0
    Kama 9796

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

    tiberium84 7.1 год назад

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

    tiberium84 7.1 год назад

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

    Kama 7.1 год назад

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

    tiberium84 7.1 год назад

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