Forums Forums Search & Filter Pro Problem filtering dates inserted as custom fields in ACF

Viewing 6 posts - 1 through 6 (of 6 total)
  • Anonymous
    #120350

    Hello,

    I have a custom post type called projects that contains a custom field (inserted by the plugin ACF) that is a “date Picker”.

    I want to filter these projects by date range but I am having trouble doing so as no results are being shown. I found other threads with similar problem and followed instructions but still didn’t manage to make it work.

    Here I forward screenshots of the custom field configuration with ACF plugin and the Date Range configuration of the date range.Custom field

    Date range Search and filter

    Could you please help me out? Thanks!

    Anonymous
    #120352
    This reply has been marked as private.
    Trevor
    #120379

    I am not certain what you are asking. If you want to know how to add a Custom Field search element to the form, drag and drop the Post Meta element in the form UI. When selecting the meta key (field name), for ACF make SURE that the name does NOT start with an underscore _

    e.g.
    _date_of_the_project_ is WRONG
    date_of_the_project_ is CORRECT

    Note that the last underscore in the name suggests that you have a blank space at the end of the field label when you defined it.

    Anonymous
    #276863

    Howdy Trevor!

    Instead of a range date picker, we’re gonna go with only one date picker.

    The thing is we need to query from that date in advance, so we did with this code.

    function filter_query_args( $query_args, $sfid ) {
    
    	// Trainings Form ID.
    	if( 1788 === $sfid && ! empty( $_GET['_sfm_start_date'] ) ) {
    		$year  = substr( $_GET['_sfm_start_date'], 4, 4 );
    		$month = substr( $_GET['_sfm_start_date'], 2, 2 );
    		$day   = substr( $_GET['_sfm_start_date'], 0, 2 );
    		$fdate = $year . $month . $day;
    
    		$query_args['posts_per_page'] = -1;
    		$query_args['orderby']      = 'meta_value_num';
    		$query_args['meta_key']     = 'start_date';
    		$query_args['meta_value']   = $fdate;
    		$query_args['meta_compare'] = '>=';
    		$query_args['meta_query']   = [[
    			'key'     => 'start_date',
    			'value'   => $fdate,
    			'compare' => '>',
    		]];
    
    		/*$q = new WP_Query( $query_args );
    
    		print '<pre><br><br>';
    			//print $fdate . '<br>';
    			print count( $q->posts ) . '<br>';
    			//print_r( $query_args );
    			//print_r( new WP_Query( $query_args ) );
    
    			foreach( $q->posts as $p )
    				print get_post_meta( $p->ID, 'start_date', true )
    					. ' : ' . $p->post_title . '<br>';
    		print '</pre>';*/
    	}
    
    	return $query_args;
    
    }
    add_filter( 'sf_edit_query_args', 'filter_query_args', 99, 2 );

    We’ve modified the query correctly, or that says the debug (as you can see commented in the code). The data is there, but somehow the results are not showing.

    Any hints? Thanks in advance.

    Anonymous
    #276864

    Hi again!

    BTW, trying another hook to keep progressing, we’ve encountered the same problem.

    Here’s the code, adapted to query instead of query args, using the hook:

    function filter_query_args( $query, $sfid ) {
    
    	if( 1788 === $sfid && ! empty( $_GET['_sfm_start_date'] ) ) {
    		$year  = substr( $_GET['_sfm_start_date'], 4, 4 );
    		$month = substr( $_GET['_sfm_start_date'], 2, 2 );
    		$day   = substr( $_GET['_sfm_start_date'], 0, 2 );
    		$fdate = $year . $month . $day;
    
    		$query->post_type      = 'product';
    		$query->posts_per_page = -1;
    		$query->order          = 'ASC';
    		$query->orderby        = 'meta_value_num';
    		$query->meta_key       = 'start_date';
    		$query->meta_value     = $fdate;
    		$query->meta_compare   = '>=';
    
    		$q = new WP_Query( $query );
    
    		print '<pre><br><br>';
    			print $fdate . '<br>';
    			print count( $q->posts ) . '<br>';
    
    			foreach( $q->posts as $p )
    				print ( get_post_meta( $p->ID, 'start_date', true ) ?: $p->post_date )
    					. ' : ' . $p->post_title . '<br>';
    
    			//print_r( $query );
    		print '</pre>';
    	}
    
    	return $query;
    
    }
    add_filter( 'sf_main_query_pre_get_posts', 'filter_query_args', 99, 2 );

    The commented code debug prints out the products filtered correctly and ordered within dates.

    20230701
    19
    20230705 : POSTNAME
    20230821 : POSTNAME
    20230828 : POSTNAME
    20231001 : POSTNAME

    Looking forward for some tips and tricks.

    Anonymous
    #276869

    Hey @Trevor!

    Been trying a bit more code but got no results, so not worth sharing this time.

    It’s like the query is not applying, even if we disable ajax…

    Could use some help from your part.

    Thanks in advance.

Viewing 6 posts - 1 through 6 (of 6 total)