Viewing 13 replies - 1 through 13 (of 13 total)
  • Plugin Author TC.K

    (@wp_dummy)

    Date range can be tricky, there are post date and date meta field. These two are completely different thing. By default, the plugin is not support, but you can achieve it by customization.

    Customization for post date and meta field are not the same. If you know coding, I can guide you how to do it.

    Thread Starter dgraydesign

    (@dgraydesign)

    Yes, I know coding. If you could suggest a way to set it up, that would be great. I’m just uncertain about how to approach it. Thanks!

    Plugin Author TC.K

    (@wp_dummy)

    Basically, you have to add the date input in the search form, and use it in the query.
    So, you can use uwpqsf_form_top (or uwpqsf_form_mid, or uwpqsf_form_bottom, depends on where you want to insert the input).

    eg

    add_action('uwpqsf_form_mid','insert_date_input');
    function insert_date_input(){
      $html = '<input name="date[from]" value="" type="text">';//you can use select or other input type
      $html = '<input name="date[to]" value="" type="text">';
    echo $html;
    }

    Now we add the date input above to the query:

    add_filter('uwpqsf_query_args','insert_date_to_query','',3);
    //if you are using default template, you will need to replace uwpqsf_query_args with uwpqsf_deftemp_query instead
    function insert_date_to_query($args, $id,$getdata){
       if($getdata['date']){
         $args['date_query'] = array(
                             'after'     => $getdata['date']['from'],
    			'before'    =>  $getdata['date']['to']
    			'inclusive' => true,
          );
         }
      return $args;
    }

    The above is for querying the post date and you can find more about (or how to use) date_query at here.

    Note this is only give you the idea of how it works, you might want to change it to fit your need.

    Thread Starter dgraydesign

    (@dgraydesign)

    Ok, that makes perfect sense. I’ll give this a try. Thanks so much for taking the time to help me out with this!

    Nice snippet, with a couple little fixes it’s working fine.
    But – since I am using 3 different forms but I need this function only in one of them – is there a way to tell the snippet to work only if the form ID is XYZ?

    Thanks

    Nevermind, I solved by moving the code from functions.php to the template page

    Plugin Author TC.K

    (@wp_dummy)

    From the snippet above, the $id is the form id, which can use for identification.

    ok now I have 2 forms in one page, and only the form id 202 must have the date range
    I have tried a couple of things but didn’t work
    any help would be appreciated

    the code I am using is this:

    add_filter('uwpqsf_deftemp_query','insert_date_to_query','',3);
    function insert_date_to_query($args, $id,$getdata){
       if($getdata['date']){
         $args['date_query'] = array(
                'after'     => $getdata['date']['from'],
    			'before'    =>  $getdata['date']['to'],
    			'inclusive' => true
          );
         }
      return $args;
    }

    Plugin Author TC.K

    (@wp_dummy)

    Use the $id for identification.

    add_filter('uwpqsf_deftemp_query','insert_date_to_query','',3);
    function insert_date_to_query($args, $id,$getdata){
       if($getdata['date'] && $id == '202'){
         $args['date_query'] = array(
                'after'     => $getdata['date']['from'],
    			'before'    =>  $getdata['date']['to'],
    			'inclusive' => true
          );
         }
      return $args;
    }

    Great, works fine!

    Now the last thing. I want to print the date fields only in the 202 (I would prefer not to hide them via css).

    I have tried with the following without success:

    add_action('uwpqsf_form_mid','insert_date_input');
    function insert_date_input($id){
    	if($id == '202'){
    	  $html = '<div class="uwpqsf_class"><span class="taxolabel-99">Quando</span>';
    	  $html .='<div class="campo-data">';
    	  $html .= '<label><span>Dal</span> <input name="date[from]" value="" type="date" placeholder="dal"></label>';//you can use select or other input type
    	  $html .= '<label> <span>al</span> <input name="date[to]" value="" type="date" placeholder="al"></label>';
    	  $html .='</div></div>';
    	  echo $html;
    	}
    }
    Plugin Author TC.K

    (@wp_dummy)

    No the function variable in insert_date_input is an array of the shortcode parameter. So, you can’t used it directly as the form id. You have to extract it from the array.

    function insert_date_input($attr){
    	if($attr['id'] == '202'){
    	  $html = '<div class="uwpqsf_class"><span class="taxolabel-99">Quando</span>';
    	  $html .='<div class="campo-data">';
    	  $html .= '<label><span>Dal</span> <input name="date[from]" value="" type="date" placeholder="dal"></label>';//you can use select or other input type
    	  $html .= '<label> <span>al</span> <input name="date[to]" value="" type="date" placeholder="al"></label>';
    	  $html .='</div></div>';
    	  echo $html;
    	}
    }

    excellent!
    thank you

    Very helpful, thanks. I was looking to add this feature as well except I want to use a date input type with the jQuery datepicker functionality. Unfortunately, there is an issue with it because some browsers (very notably Firefox) don’t yet support it and thus will default to a basic text input. Thanks to (https://code.tutsplus.com/tutorials/quick-tip-create-cross-browser-datepickers-in-minutes–net-20236) I found a way to work around this compatability issue. Below is my final code. Hope it helps someone.

    add_action('uwpqsf_form_bottom','insert_date_input');
    function insert_date_input() {
    	?>
    	<script type="text/javascript">
    	jQuery(document).ready(function() {
    		var elem = document.createElement('input');
    		elem.setAttribute('type', 'date');
    
    		if ( elem.type === 'text' ) {
    			$('.MyDate').datepicker({
    				showButtonPanel: false,
    				showOtherMonths: true,
    				selectOtherMonths: true,
    				dateFormat : 'yy-mm-dd'
    			});
    		}
    
    	});
    	</script>
    	<?php
    	$html = sprintf('<input type="date" class="MyDate" name="date[from]" value="%s" placeholder="Between <date>" />?', $_GET["date"]["from"]);
    	$html .= sprintf('<input type="date" class="MyDate" name="date[to]" value="%s" placeholder="and <date>" />', $_GET["date"]["to"]);
    	echo $html;
    }
Viewing 13 replies - 1 through 13 (of 13 total)
  • The topic ‘Search by a date range’ is closed to new replies.