Created
June 1, 2021 14:09
-
-
Save Prroffessorr/70a2ffb15c6014a83d6ee35a1bdb2d96 to your computer and use it in GitHub Desktop.
WordPress Пример фильтрации с множественными значения (Множество параметров, Отображение в начале списка в зависимости от значения, Строгое следования условиям )
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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