WordPress как на ладони
Шаблоны, плагины и темы для настоящих поклонников Elementor. От TemplateMonster.com wordpress jino

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

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

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

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

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

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

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

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

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

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

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

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

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