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

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

HIT

22.06.2022

2013

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]
  • Похожие записи
  • Комментарии
  • Вложения
Пользовательский метод доставки

Пользовательский метод доставки

Создадим пользовательский метод доставки для Woocommerce 3.0. Метод создадим в виде плагина. Создадим для пользовательского метода уведомление при превышении веса (лимит установлен на 0): т.е. если у нас будет в Читать далее »

Плагин по доставке Почтой России

Плагин по доставке Почтой России

Рассмотрим особенности работы и настройки плагина Russian Post and EMS for WooCommerce (2,000+). Бесплатная версия Бесплатный версия определяет возможные варианты доставки только по введенному индексу. Можно сделать поле индекса невидимым Читать далее »

/
Предварительная стоимость (товар + количество)

Предварительная стоимость (товар + количество)

Необходимо сделать, чтобы при изменении количества посетитель видел финальную стоимость покупки (а не тогда, когда он уже закинул товар в корзину). Решение для простого товара // Предварительная сумма: Цена + Читать далее »

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

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 6170

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

  1. Филипп

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

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