/ Плагины / Фильтр по наличию

Фильтр по наличию

HIT

22.06.2022

2166

1

Оказывается в последних версиях Woocommerce есть встроенная функция фильтрации по наличию. Через добавление в url параметра filter_stock_status. Можно её использовать для создания фильтра:

Функция вывода списка:

add_action( 'woocommerce_before_shop_loop', 'add_filter_stock', 25 );
function add_filter_stock() { 
	echo '
	<select name="stock-switcher" id="stock-switcher">
		<option value="all">Все товары</option>
		<option value="instock">В наличии</option>		
		<option value="outofstock">Нет в наличии</option>
		<option value="onbackorder">Предзаказ</option>
	</select>
	';
}

Функция с условиями вывода элементов списка в зависимости от текущей категории, т.е. есть ли, например, товары не в наличии.

add_action( 'woocommerce_before_shop_loop', 'add_filter_stock', 25 );
function add_filter_stock() { 

	if ( !is_search() ) {

		$poductcatid = get_queried_object_id();

		$args = array(
			'post_type' => 'product',
			'numberposts' => -1,
			'fields' => 'ids',
			'tax_query' => array(
				array(
					'taxonomy' => 'product_cat',
					'field' => 'id',
					'terms' => $poductcatid
				),
			)
		);

		$products = get_posts( $args );

		foreach($products as $product){
			$produts_status[] = get_post_meta( $product, '_stock_status', true );;
		}
		
		$produts_status_uniq = array_unique($produts_status);
		wp_reset_postdata();	
		
		echo '<select name="stock-switcher" id="stock-switcher"><option value="all">Все товары</option>';
		if (in_array('instock', $produts_status_uniq)) { echo '<option value="instock">В наличии</option>'; }
		if (in_array('onbackorder', $produts_status_uniq)) { echo '<option value="onbackorder">Предзаказ</option>'; }
		if (in_array('outofstock', $produts_status_uniq)) { echo '<option value="outofstock">Нет в наличии</option>'; }
		echo '</select>';		
		
	}

}

Согласно условию (!is_search()) данный фильтр не будет выводится в шаблоне результатов поиска, т.к. в этом случае нужно дорабатывать и скрипт.

Скрипт изменения url:

// Фильтр по наличию
jQuery(document).ready(function($) { 
	
	var url = window.location.href;
	
	if (url.includes("filter_stock_status")) {
		
		var stockcur = url.split('filter_stock_status=')[1];
		$("#stock-switcher").val(stockcur);
		
	}
	
	
	$('#stock-switcher').on('change', function () {
		
		var url = window.location.href;
		url = url.split('?')[0];

		var stockwait = $("#stock-switcher option:selected").val();
		
		if ( stockwait == 'all' ) {
			window.location.replace(url);
		} else {
			window.location.replace(url + '?filter_stock_status=' + stockwait);
		}
		
	});
	
});

Данное решение правильно работает со стандартной пагинацией. Не работает в шаблоне поиска, а также с другими фильтрами.

[site-socialshare]
  • Похожие записи
  • Комментарии
  • Вложения
Шорткод вывода товаров по метке

Шорткод вывода товаров по метке

Иногда требуется быстро вывести товары с определенной меткой. Данный шорткод проверял лично — работает. В данной функции предусмотрен вывод товаров по колонкам (wc_get_loop_prop( ‘columns’ )). Шорткод выглядит так: Данный шорткод Читать далее »

/
Акция 20% на каждый 3 и 30% на каждый 4 товар

Акция 20% на каждый 3 и 30% на каждый 4 товар

Поступила нестандартная задача, реализовать акцию 20% на каждый 3 и 30% на каждый 4 товар. Сложность заключалась в том что скидки 20% и 30% должны были действовать на товары начиная Читать далее »

Интеграция Woocommerce с 1С

Интеграция Woocommerce с 1С

Интеграция Woocommerce с 1С — довольно сложная тема с множеством нюансов. Буду описывать на что стоит обращать внимание, с какими проблемами пришлось столкнуться. Плагин 1С:Предприятие Data Exchange Так как не Читать далее »

Добавить комментарий

Notice: Функция WP_Styles::add вызвана неправильно. Стиль с дескриптором "editor-buttons" был поставлен в очередь с незарегистрированными зависимостями: dashicons. Дополнительную информацию можно найти на странице «Отладка в WordPress». (Это сообщение было добавлено в версии 6.9.1.) in /home/t/tiberi6w/opttour.ru/public_html/wp-includes/functions.php on line 6260

1 комментарий

  1. Филипп

    Огромное спасибо! Кучу всего перепробовал, заработал только данный способ!

Фильтр по наличию Фильтр по наличию
Создание карусели Owl параметрами из HTML
Рекомендации для васСоздание карусели Owl параметрами из HTMLOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.