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

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

HIT

22.06.2022

2042

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 имеет определенную структуру и функционал. Но данная структура не совсем удобна. Доработаем страницу оформления, разбив на логические блоки: Заказ, Доставка, Форма оплаты, Информация о заказчике и Читать далее »

/
Счет на оплату

Счет на оплату

Дорабатываем стандартный функционал Woocommerce, добавляя в него генерацию и отправку счета на оплату. А также прочие способы дополнительных автоматических вложений: накладная, квитанция. Плагин WooCommerce PDF Invoices & Packing Slips У Читать далее »

Отключаем лишний функционал Woocommerce

Отключаем лишний функционал Woocommerce

Отключаем невостребованные функции Woocommerce, чтобы было легче работать, не захламлять админку и не путать заказчиков. Отключить типы товаров Удалить чекбоксы виртуальный и загружаемый товары Удалить их также из фильтра админки: Читать далее »

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

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. Филипп

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

Фильтр по наличию Фильтр по наличию
URL, ссылки страниц, ЧПУ
Рекомендации для васURL, ссылки страниц, ЧПУOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.