@prod_snezhok

Как можно реализовать простой фильтр на Wordpress?

мучаюсь с реализацией фильтра, на сайте натянутом на WP.
с помощью какого нибудь плагина это возможно реализовать...
Есть сайт, на нем есть рубрика "Кейсы", в этой рубрике изначально выводились карточки кейсов
653c3c8f53666515901241.png
следующим методом
<div class="row">
	<?php if ( have_posts() ) : ?>
		<?php
		while ( have_posts() ) : the_post(); ?>
			<div class="case-col col-lg-4 col-md-6">
			<div class="new-caseItem" style="background-image:url(<?php the_post_thumbnail_url();?>);">
			<div class="new-caseItem-content">
			<div class="new-caseItem-tags"><?php the_tags( '', ', '); ?></div>
			<div class="new-caseItem-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div>
			<div class="new-caseItem-expect"><?php the_field( 'what_was_done' ); ?></div>
			<div class="new-caseItem-button"><a class="btn-new" href="<?php the_permalink(); ?>">Читать кейс</a> 
                        </div>
			</div>
			</div>
			</div>
		<?php endwhile;
		else :
		get_template_part( 'template-parts/content', 'none' );
	endif; ?>
</div>

Я переделал карточки под статичный вывод, по единичности вывел их
вот как они выглядят
<div class="case-col col-lg-4 col-md-6 magazine">
	<div class="new-caseItem"
		style="background-image:url();">
		<div class="new-caseItem-content">
		<div class="new-caseItem-tags"><a href="" rel="tag">Интернет-магазин</a></div>
		<div class="new-caseItem-title"><a href="">Магазин по продаже септиков Септик Маркет</a></div>
		<div class="new-caseItem-expect">Увеличили розницу на 60% за счет поискового продвижения</div>
		<div class="new-caseItem-button"><a class="btn-new" href="">Читать кейс</a></div>
		</div>
	</div>
</div>
<div class="case-col col-lg-4 col-md-6 magazine">
	<div class="new-caseItem"
		style="background-image:url();">
		<div class="new-caseItem-content">
		<div class="new-caseItem-tags"><a href="" rel="tag">Интернет-магазин</a></div>
		<div class="new-caseItem-title"><a href="">Ural Sound — интернет-магазин автозвука</a></div>
		<div class="new-caseItem-expect">Органический трафик вырос до 1,86 млн. пользователей</div>
		<div class="new-caseItem-button"><a class="btn-new" href="">Читать кейс</a></div>
		</div>
	</div>
</div>

Код сверху выводит две карточки, главный атрибут является тег
Я добавил к главному родительскому div классы для идентифицирования по типу ( .magazine, .remont)
<div class="new-caseItem-tags"><a href="" rel="tag">Интернет-магазин</a></div>

По нему нужно производить сортировку.
И я попытался реализовать фильтр с помощью Jquery, добавив скрипт в конце файла
<script type="text/javascript">
// Фильтр кейсов
	jQuery(function(){
			tail.select('select.select-ads', { placeholder: 'Рекламная площадка', multiShowCount: false,multiContainer: '.tail-move-container' });
			tail.select('select.select-otrasl', { placeholder: 'Отрасль бизнеса', multiShowCount: false,multiContainer: '.tail-move-container' }); //строки бывшего программиста, выводящие меню фильтров на экран
			
			var MedCheck = false;
			var autotemCheck = false;
			var kosmetologCheck = false;
			var magazineCheck = false;
			var stomatologCheck = false;
			
			
			$('li').on('click', function(event){
				$('.case-col').addClass('hide');
				
				var data = $(this).data('key');
				if ((data == "Медицина") && (MedCheck == false)) {
					$('.med').removeClass('hide');
					MedCheck = true;
				} else if ((data == "Медицина") && (MedCheck == true)) {
					$('.med').addClass('hide');
					MedCheck = false;
				};
					
				if ((data == "Автозапчасти") && (autotemCheck == false)) {
					$('.autotem').removeClass('hide');
					autotemCheck = true;
				} else if ((data == "Автозапчасти") && (autotemCheck == true)) {
					$('.autotem').addClass('hide');
					autotemCheck = false;
				};
					
				
				if ((data == "Стоматология") && (stomatologCheck == false)) {
					$('.stomatolog').removeClass('hide');
					stomatologCheck = true;
				} else if ((data == "Стоматология") && (stomatologCheck == true)) {
					$('.stomatolog').addClass('hide');
					stomatologCheck = false;
				};
					
				if ((data == "Косметология") && (kosmetologCheck == false)) {
					$('.kosmetolog').removeClass('hide');
					kosmetologCheck = true;
				} else if ((data == "Косметология") && (kosmetologCheck == true)) {
					$('.kosmetolog').addClass('hide');
					kosmetologCheck = false;
				};
					
				if ((data == "Интернет-магазин") && (magazineCheck == false)) {
					$('.magazine').removeClass('hide');
					magazineCheck = true;
				} else if ((data == "Интернет-магазин") && (magazineCheck == true)) {
					$('.magazine').addClass('hide');
					magazineCheck = false;
				};
				
				
				
				
				if ((MedCheck == false) && (kosmetologCheck == false) && (magazineCheck == false) && (stomatologCheck == false) && (autotemCheck == false)) {
					$('.case-col').removeClass('hide');
				};
				event.stopPropagation();
			 });
		});
</script>

Суть в том что я добавляю к ненужным карточкам класс .hide
Имеющий код CSS:
.hide {
	position:absolute;
	visibility: hidden;
}

Таким образом ненужные карточки я скрываю, а у нужных я убираю этот класс при условии если он имеется.
Но мой вариант реализации имеет кучу недостатков
653c4001e3bb3125870142.png
653c400a5c510992553476.png
Можно глянуть по ссылке
https://digitalriff.ru/cases/
Пока что реализовал недофильтр на отрасли бизнеса. Но если натыкать несколько ещё и удалить один, всё пойдёт по одному месту...
Теперь вопрос к тем кто уже может имел дело с такой задачей:
Какие другие варианты есть реализации?
Может какой плагин накатить?
Хотелось бы оставить метод вывода карточек с помощью запроса php...
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы