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

    (@wp_dummy)

    Please refer to this and this.

    Thread Starter hopekim511

    (@hopekim511)

    Sorry, we changed our direction and we want to be able to search via AJAX for months not date ranges. More specifically I would like to be able to utilize the wp_get_archives() function to display months as search options. I know basic php but can’t seem to figure out how to write this function out..

    Plugin Author TC.K

    (@wp_dummy)

    Still the concept is the same, but instead of search for range, you will need to use single date query. Refer the data query example in the documentation.

    Try it out the solutions on the threads above. You can always come back if you got question.

    Thread Starter hopekim511

    (@hopekim511)

    So this is what i have so far and it’s not working 100%. Namely, the argument inside of the foreach() function isn’t valid. Could you help me fix my code?

    // ADD FILTERABLE MONTHS TO THE ULTIMATE SEARCH QUERY FILTER
    add_filter('uwpqsf_query_args','insert_month_to_query','',3);
    function insert_month_to_query($args,$id,$getdata){
         $args['date_query'] = array(
                'type' => $getdata['monthly'],
          );
    
      return $args;
    }
    
    add_action('uwpqsf_form_bottom','insert_month_input');
    function insert_month_input($args){
    	$n = 1;
    	foreach ( $months as $month ) {
          $html = '<div class="uwpqsf_class">';
          $html .= '<div><label></small></span> <input name="date[month]" value="" type="radio" class="datep">'.$term->name.'</label></div>';//you can use select or other input type
          $n++;
        }
    
        $html .='</div>';
        echo $html;
    }

    Plugin Author TC.K

    (@wp_dummy)

    You got a lot of errors in your codes, not only the foreach() part.

    1. You got inconsistent of input name in the query.
    Your input name is name="date[month]" wheres the query you data you pass to date query is $getdata['monthly'] which is incorrect. Since it is only a single value, you will no need to use array in the name. It should be name="month" and the in the data query the name must consistent, $getdata['month'].

    2. Wrong date query arguments. If you have read the documentation, it should be something like this:

    'date_query' => array(
    		array(
    			'year'  => 2012,//this must present, otherwise it will not knowing what year to get.
    			'month' => $getdata['month'],
    		),
    	),

    Note the year argument must present. You probably need another input for years as well.

    3. The foreach error because $months variable dosen’t have any value in it.
    I assume you want the option from Jan to Dec, then you should use for instead. eg:

    for($i=1; $i <13; $++){
     $html = '<div class="uwpqsf_class">';
          $html .= '<div><label></small></span> <input name="month" value="" type="radio" class="datep">'.$i.'</label></div>';
    }

    Thread Starter hopekim511

    (@hopekim511)

    Thank you so much for your response! There is one thing that I am confused about and its regarding #3. How is my insert_month_input function supposed to know that it’s supposed to be grabbing months as opposed to any other data? Right now it’s outputting radio buttons of all numbers less than 13. Here is my code:

    // COMBINED CODE
    add_filter('uwpqsf_query_args','insert_month_to_query','',3);
    function insert_month_to_query($args,$id,$getdata){
         $args['date_query'] = array(
    			'year'  => 2016,
                'type' => $getdata['month'],
          );
    
      return $args;
    }
    
    add_action('uwpqsf_form_bottom','insert_month_input');
    function insert_month_input($args){
    	$html = '<div class="uwpqsf_class" id="tax-radio-2"><span class="taxolabel-2"></span>';
    
    	for($i=1; $i <13; $i++){
          $html .= '<div><label></small></span> <input name="month" value="" type="radio" class="datep">'.$i.'</label></div>';//you can use select or other input type
        }
    
        $html .='</div>';
        echo $html;
    }

    Plugin Author TC.K

    (@wp_dummy)

    The numbers represent the months respectively. Eg, 1 = January, 2 = February…

    If you want it to show in months instead of number. You need to create an array for months.

    $months = array(
        '1' => 'January',
        '2' => 'February',
        '3' => 'March',
        ........etc
    );

    And then you can use back the foreach as you used before.

    add_action('uwpqsf_form_bottom','insert_month_input');
    function insert_month_input($args){
          $months = array(
        '1' => 'January',
        '2' => 'February',
        '3' => 'March',
        ........etc
    );
    
    	$html = '<div class="uwpqsf_class" id="tax-radio-2"><span class="taxolabel-2"></span>';
    
    	foreach($months as $key => $val){
          $html .= '<div><label></small></span> <input name="month" value="'.$key.'" type="radio" class="datep">'.$val.'</label></div>';//you can use select or other input type
        }
    
        $html .='</div>';
        echo $html;
    }
    Thread Starter hopekim511

    (@hopekim511)

    The problem is that the months aren’t actually grabbing the months via my database. Moreover, each month displays every post. I need a way to connect the two functions (insert_month_to_query and insert_month_input) or tell the second function to search through my posts and only display the months that there are posts from and when someone chooses that radio button, only display posts from that month. I hope that makes sense.

    Thread Starter hopekim511

    (@hopekim511)

    By the way! Thanks for helping me with this ?? I really appreciate it since this isn’t a paid plugin.

    Thread Starter hopekim511

    (@hopekim511)

    So I have it working now and my search filter is grabbing posts by Month and displaying them properly. However, I would like an input value to filter both a month and a year togther

    add_filter('uwpqsf_query_args','insert_month_to_query','',3);
    function insert_month_to_query($args,$id,$getdata){
       $args['date_query'] = array(
       		array(
    			'year'  => $getdata['byyear'],
                'month' => $getdata['month'],
            ),
          );
    
      return $args;
    }
    
    add_action('uwpqsf_form_bottom','insert_month_input');
    function insert_month_input($atts){
    	 global $wpdb, $wp_locale;
    
    	$query = "SELECT YEAR(post_date) AS <code>year</code>, MONTH(post_date) AS <code>month</code>, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date $order $limit";
    	$results = $wpdb->get_results( $query );
    
    	$html = '<div class="uwpqsf_class" id="tax-radio-2"><span class="taxolabel-2"></span>';
    
    	foreach($results as $result){
          $html .= '<div><label></small></span> <input name="month" value="'.$result->month.'" type="radio" class="datep">'.sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $result->month ), $result->year ).'</label></div>';//you can use select or other input type
        }
    
        $html .='</div>';
        echo $html;
        echo print_r($results); 
    
    }

    Thread Starter hopekim511

    (@hopekim511)

    Noticed that I haven’t gotten a response back yet. I would really appreciate one soon! Thank s ??

    Thread Starter hopekim511

    (@hopekim511)

    I got it working! For anyone who is trying to achieve the same functionality here is the code. Hope it helps!

    // ** ADD A DATE SEARCH FILTER TO THE UWPQSF PLUGIN ** //
    add_filter('uwpqsf_query_args','insert_yearmon_to_query','',3);
    
    // Add the 'YearMonth' date parameter to the query arguments
    function insert_yearmon_to_query($args,$id,$getdata){
       $args = array(
    		'm'  =>  $getdata['yearmonth'],
        );
    
      return $args;
    }
    
    add_action('uwpqsf_form_bottom','insert_yearmon_input');
    function insert_yearmon_input($attr){
    
    	if($attr['id'] == '105'){
    	global $wpdb, $wp_locale;
    
    		$query = "SELECT YEAR(post_date) AS <code>year</code>, MONTH(post_date) AS <code>month</code>, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date $order $limit";
    		$results = $wpdb->get_results( $query );
    
    		$html = '<div class="uwpqsf_class" id="tax-radio-2"><span class="taxolabel-2"></span>';
    
    		foreach($results as $result){
    			$html .= '<div><label></small></span><input name="yearmonth" value="'.$result->year.sprintf("%02d", $result->month).'" type="radio" class="datep">'.sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $result->month ), $result->year ).'</label></div>';
    	    }
    
    	    $html .='</div>';
    	    echo $html;
    	}
    
    }
Viewing 12 replies - 1 through 12 (of 12 total)
  • The topic ‘Search By Month’ is closed to new replies.