Skip to content

Instantly share code, notes, and snippets.

@Prroffessorr
Created June 1, 2021 14:09
Show Gist options
  • Save Prroffessorr/70a2ffb15c6014a83d6ee35a1bdb2d96 to your computer and use it in GitHub Desktop.
Save Prroffessorr/70a2ffb15c6014a83d6ee35a1bdb2d96 to your computer and use it in GitHub Desktop.
WordPress Пример фильтрации с множественными значения (Множество параметров, Отображение в начале списка в зависимости от значения, Строгое следования условиям )
<?php
//Все такосномии этом примере были созданы отедельно. в WP таких изначально нет. Имейте это в виду
//Получам все параметры (В нашем случае это все массивы, поэтому сначала их нужно будет подготовить к работе)
$clubs_city = $_POST['city'];
$clubs_metro = $_POST['metro'];
$clubs_ages = $_POST['ages'];
$clubs_price = $_POST['price'];
//Получаем _clubs_organization_adress_metro
$array_metro = array_diff(explode(', ', $clubs_metro ), array('', NULL, false));
//Получаем _activity_age
$array_ages = array_diff(explode(',', $clubs_ages ), array('', NULL, false));
//Получаем _clubs_organization_price
$array_price = array_diff(explode(',', $clubs_price ), array('', NULL, false));
if($_POST['categoty']){
$activity_cat=$_POST['categoty'];
}
//Данные для категории
if ($_POST['categoty'] && $_POST['categoty']!="All") {
$param_activity = array(
'taxonomy' => 'clubs-category',
'field' => 'slug',
'terms' => $activity_cat
);
}
else{
$param_activity= array(
'taxonomy' => 'clubs-category',
'operator' => "EXISTS"
);
}
//Получаем данные для городов
if(!empty($clubs_city)&& $clubs_city!="All"){
$param_city=array(
'state_clause' => array(
'key' => '_clubs_organization_adress_city',
'value' => $clubs_city,
),
);
}
else{
$param_city=array('key'=>'_clubs_organization_adress_city');
}
//Для метро
if(!empty($clubs_metro)){
foreach($array_metro as $arr){
$param_metro[]=array(
'relation' => 'OR',[
'key' => '_clubs_organization_adress_metro',
'compare' => 'LIKE',
'value' => $arr,
]
);
}
}
else{
$param_metro=array('key'=>'_clubs_organization_adress_metro');
}
//Получаем данные о возрастах
if(!empty($array_ages)){
foreach($array_ages as $arr){
$param_age[]=array(
'relation' => 'OR',[
'key' => '_clubs_organization_ages',
'compare' => 'LIKE',
'value' => $arr,
]
);
}
}
else{
$param_age=array('key'=>'_clubs_organization_ages');
}
//Получаем данные о ценах
if(!empty($array_price)){
foreach($array_price as $arr){
$param_price[]=array(
'relation' => 'OR',[
'key' => '_clubs_organization_price',
'compare' => 'LIKE',
'value' => $arr,
]
);
}
}
else{
$param_price=array('key'=>'_clubs_organization_price');
}
//Получаем записи с рекламой и выводим их в топ
$param_adds=array(
'relation' => 'OR',
array(
'key' => '_clubs_add_ads',
'value' => "yes",
'compare' => '='
),
array(
'key' => '_clubs_add_ads',
'value' => "yes",
'compare' => '!='
)
);
//Формируем запрос в БД исходя из полученных данных
$params = array(
'post_type' => 'clubs',
'nopaging' => true,
'orderby' => array(
'meta_value'=>"DESC",
"date"=>"DESC"
),
'tax_query' => [
'relation' => 'AND',
[
$param_activity
]
],
'meta_query' => array(
'relation' => 'AND',
$param_adds,
$param_city,
$param_metro,
$param_age,
$param_price,
),
);
$query = new WP_Query($params);
//var_dump($params);
while ($query->have_posts()):
$query->the_post();
//Выводим результат (в моем случае это шаблон. Но у вас это может быть что угодно)
get_template_part('clubs');
endwhile;
wp_reset_postdata();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment