add search filters

This commit is contained in:
2022-11-11 23:49:39 +03:00
parent 01f34e4fb2
commit 73df506096
8 changed files with 236 additions and 38 deletions

View File

@@ -4,17 +4,127 @@
*
*/
get_header();?>
<?$s = trim($s);?>
<?if (trim($s) !== ''):?>
<?$params = [
'post_type' => 'post',
's' => $s,
'post_status' => 'publish',
'posts_per_page' => 20
]?>
<?//if( !empty( $query ) ){
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 20,
'paged' => get_query_var('paged') ?: 1
);
if ( $_GET['search_type'] == 'date_down'){
$args['order'] = 'DESC';
$args['orderby'] = 'date';
}
else if($_GET['search_type'] == 'date_up') {
$args['order'] = 'ASC';
$args['orderby'] = 'date';
}
$findtag = strpos($s, "#");
if( $findtag !== false OR $_GET['search_select'] == 'tag') {
$active_tag = True;
if ($findtag == false) {
$terms = $s;
}
else {
$terms = substr($s, 1);
}
$args['tax_query'] = [
'relation' => 'OR',
[
'taxonomy' => 'post_tag',
'field' => 'name',
'terms' => $terms
]
];
}
else {
$active_tag = false;
$args['s'] = $s;
}
if($_GET['search_date'] == 'week') {
$args['date_query'] = [
[
'after' => '1 week ago'
]
];
}
else if ($_GET['search_date'] == 'month'){
$args['date_query'] = [
[
'after' => '1 month ago'
]
];
}
else if ($_GET['search_date'] == 'year'){
$args['date_query'] = [
[
'after' => '1 year ago'
]
];
}
else if ($_GET['search_date'] == 'range'){
if (isset($_GET['search-start-date']) and $_GET['search-start-date'] !== ''){
$date1 = explode('-', $_GET['search-start-date']);
}
if (isset($_GET['search-end-date']) and $_GET['search-end-date'] !== ''){
$date2 = explode('-', $_GET['search-end-date']);
}
$args['date_query'] = [
[
array(
'after' => array(
'year' => $date1[0],
'month' => $date1[1],
'day' => $date1[13],
),
'before' => array( // до этой даты
'year' => $date2[0],
'month' => $date2[1],
'day' => $date2[2],
),
)
]
];
}
$posts = new WP_Query($args);
//}?>
@@ -28,12 +138,12 @@ get_header();?>
<form action="<?php bloginfo( 'url' ); ?>" method="get">
<input class="search-text" type="text" name="s" placeholder="Найти" value="<?=$s?>"/>
<input class="search_submit" type="submit" value="Найти"/>
<?if ($s !== ''):?>
<div class="search-result">
По запросу «<?php
$allsearch = new WP_Query($params);
$key = esc_html($s, 1);
$count = $allsearch->post_count; _e('');
$count = $posts->found_posts; _e('');
_e('<span class="search-terms">');
echo $key; _e('</span>» найдено ');
if ($count == 1):
@@ -44,33 +154,48 @@ else:
else:
echo $count . ' '; _e('результата');
endif;
endif;
endif;
//wp_reset_query(); ?>
</div>
<?endif?>
<div id="find_panel">
<select class="search-select" id="search_type" name="search_type">
<option value="date">По дате</option>
<select class="search-select search-select-type" id="search_type" name="search_type">
<option value="date_down">По дате&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="date_arrow">↓</span></option>
<option value="date_up" <?if($_GET['search_type'] == 'date_up'):?> selected<?endif?>>По дате&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="date_arrow">&#8593;</span></option>
<option value="revel" <?if($_GET['search_type'] == 'revel'):?> selected<?endif?>>По релевантности</option>
</select>
<select class="search-select" id="search_date" name="search_date">
<option value="all" selected>За все время</option>
</select>
</div>
<select class="search-select search-select-date" id="search_date" name="search_date">
<option value="all">За все время</option>
<option value="week" <?if($_GET['search_date'] == 'week'):?> selected<?endif?>>За неделю</option>
<option value="month" <?if($_GET['search_date'] == 'month'):?> selected<?endif?>>За месяц</option>
<option value="year" <?if($_GET['search_date'] == 'year'):?> selected<?endif?>>За год</option>
<option value="range" <?if($_GET['search_date'] == 'range'):?> selected<?endif?>>За период</option>
</select>
<select class="search-select search-select-tags" id="search_select" name="search_select">
<option value="all">Все</option>
<option value="tag"<?if ($active_tag):?> selected<?endif?>>Теги</option>
</select>
<div id="search-calendar" style="visibility: <?if($_GET['search_date'] == 'range'):?>visible<?else:?>hidden<?endif?>;">
<input id="search-start-date" name="search-start-date" type="date" value = "<?if (isset($_GET['search-start-date']) and $_GET['search-start-date'] !== '' ):?><?=$_GET['search-start-date']?><?else:?><?=date('Y-m-d')?><?endif?>">
-
<input id="search-end-date" name="search-end-date" value = "<?if (isset($_GET['search-end-date']) and $_GET['search-end-date'] !== ''):?><?=$_GET['search-end-date']?><?else:?><?=date('Y-m-d')?><?endif?>" type="date">
</div>
</div>
</form>
</div>
<?//print_r($posts)?>
<?php if(have_posts()) :?>
<?php if ($s !== '' and $posts->have_posts()) :?>
<div class="search-card-box">
<?php while(have_posts()) : the_post();?>
<?php while($posts->have_posts()) : $posts->the_post();?>
@@ -92,12 +217,15 @@ endif;
<?php endwhile;?>
</div>
<?get_template_part( '/blocks/paginator');?>
<?
$GLOBALS['wp_query']->max_num_pages = $posts->max_num_pages;
get_template_part( '/blocks/paginator');?>
<?php endif;?>
<?php endif;?>
<?wp_reset_postdata();?>
@@ -105,4 +233,20 @@ endif;
</div>
<?php get_footer(); ?>
<?php get_footer(); ?>
<script>
var search_date_select = document.getElementById('search_date');
var data_range_panel = document.getElementById('search-calendar');
search_date_select.addEventListener('change', function() {
if (search_date_select.selectedIndex == 4) {
data_range_panel.style.visibility = "visible";
}
})
</script>