-
Notifications
You must be signed in to change notification settings - Fork 32
/
search-by-date.php
95 lines (82 loc) · 2.81 KB
/
search-by-date.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
/**
Plugin Name: WPAdverts Snippets - Search by date
Version: 1.0
Author: Greg Winiarski
Description: Adds date field to the [adverts_list] search bar.
*/
// The code below you can paste in your theme functions.php or create
// new plugin and paste the code there.
add_filter( 'adverts_form_load', 'search_by_date_form_load' );
add_filter( 'adverts_list_query', 'search_by_date_query' );
/**
* Adds posted_date field into search form in [adverts_list].
*
* @param array $form Search form scheme
* @return array Customized search form scheme
*/
function search_by_date_form_load( $form ) {
if( $form['name'] != 'search' ) {
return $form;
}
$form['field'][] = array(
"name" => "posted_range",
"type" => "adverts_field_select",
"class" => "",
"order" => 20,
"label" => "",
"options" => array(
array( "value" => "today", "text" => "Today"),
array( "value" => "since-yesterday", "text" => "Since Yesterday"),
array( "value" => "less-than-7-days-ago", "text" => "Less than 7 days ago"),
array( "value" => "less-than-30-days-ago", "text" => "Less than 30 days ago"),
),
"empty_option" => true,
"empty_option_text" => "Select date range ...",
"meta" => array(
"search_group" => "visible",
"search_type" => "full"
)
);
return $form;
}
/**
* Adds search by date params to WP_Query
*
* The query is modified only if $_GET['posted_range'] is set and has non empty value
*
* @param array $args WP_Query args
* @return array Modified WP_Query args
*/
function search_by_date_query( $args ) {
if( adverts_request( 'posted_range' ) ) {
$date_query = null;
$ct = current_time( "timestamp", 1 );
switch( adverts_request( 'posted_range' ) ) {
case "today":
$date_query = array(
"after" => date("Y-m-d 00:00:00", current_time( "timestamp", 1 ) )
);
break;
case "since-yesterday":
$date_query = array(
"after" => date("Y-m-d 00:00:00", strtotime( "yesterday", $ct ) )
);
break;
case "less-than-7-days-ago":
$date_query = array(
"after" => date("Y-m-d 00:00:00", strtotime( "today -7 days", $ct ) )
);
break;
case "less-than-30-days-ago":
$date_query = array(
"after" => date("Y-m-d 00:00:00", strtotime( "today -30 days", $ct ) )
);
break;
}
if($date_query) {
$args["date_query"] = $date_query;
}
}
return $args;
}