@Concencuc

Как фильтровать кастомные типы постов по категориям?

615c5a96a630c435693938.jpeg
У меня стоит задача фильтровать кастомные типы записей по таким категориям. Но вариант с родительскими категориями мне кажется на самым удачным.
615c5b0e53123281330959.jpeg
Каким способом можно реализовать подобные категории?
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Создаете простую html форму с get-запросом. Очевидно, что товары не могут быть одновременно светлыми и темными, поэтому это должны быть радио-кнопки, а не чекбоксы, как на макете

<form method="get" class="obj-filter">
	<input class="obj-filter-input" type="radio" id="light" name="color" value="light">
	<label class="obj-filter-label" for="light">Light</label>

	<input class="obj-filter-input" type="radio" id="dark" name="color" value="dark">
	<label class="obj-filter-label" for="dark">Dark</label>

	<input id="obj-filter-submit" type="submit" class="button" value="Фильтровать">
</form>


Теперь вам нужно зарегистрировать этот параметр color для того, чтобы можно было получить его из ссылки с get-параметрами

add_filter( 'query_vars', 'add_query_vars' );
function add_query_vars( $qvars ) {

	$qvars[] = 'color';

	return $qvars;
}


При нажатии кнопки "Фильтровать" страница перезагружается, при этом создается новый запрос в базу, на хуке pre_get_posts вы можете выдернуть параметры get-запроса из ссылки и отсортировать нужные вам записи

add_action( 'pre_get_posts', 'custom_pre_get_posts', 1 );
	function custom_pre_get_posts( $query ) {
	// Выходим, если это админ-панель или не основной запрос
	if( is_admin() || !$query->is_main_query() )
		return;

	// сортируем записи 'obj', если указан гет-запрос
	if ( $query->is_archive() && $query->get('post_type') === 'obj' ) {
		if ( $var = get_query_var( 'color', false ) ) {
			$query->set( 'obj-cat', $var );
		}
	}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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