Skip Navigation

[Resolved] Custom combine date filter issues

This is the technical support forum for Toolset - a suite of plugins for developing WordPress sites without writing PHP.

Everyone can read this forum, but only Toolset clients can post in it. Toolset support works 6 days per week, 19 hours per day.

Sun Mon Tue Wed Thu Fri Sat
- 10:00 – 13:00 10:00 – 13:00 10:00 – 13:00 10:00 – 13:00 10:00 – 13:00 -
- 14:00 – 18:00 14:00 – 18:00 14:00 – 18:00 14:00 – 18:00 14:00 – 18:00 -

Supporter timezone: Asia/Kolkata (GMT+05:30)

This topic contains 9 replies, has 2 voices.

Last updated by MattI4840 1 year, 7 months ago.

Assisted by: Minesh.

Author
Posts
#2601295
Screenshot 2023-04-30 123244.png

Tell us what you are trying to do?

I have a view that displays two cpts Containers and Shipments, and it has a custom parent relationship filter that Minesh helped me with here (https://toolset.com/forums/topic/filter-view-by-parent-post/). I am now attempting to add a date search that combines two custom date fields, Container Confirmation Date and Shipment Confirmation Date.

I'm running into two issues now. First if I input a date (I've tried with text and datepicker inputs) but do not select a warehouse (parent filter mentioned above) I get a blank page. Second, if I select a warehouse, I get results but it doesn't apply the date filter.

I thought this may have something to do with only being able to use the AND operator within the view, so I found the fix for that here (https://toolset.com/errata/and-always-used-with-multiple-views-query-filters-even-if-or-is-specified/), unfortunately that causes a critical error on the site. I reformatted it a bit and removed the array in favor of a single view id and it has no affect. Thought it would be good to mention.

I'll provide access to the site and further info in my follow-up.

#2601527

Minesh
Supporter

Languages: English (English )

Timezone: Asia/Kolkata (GMT+05:30)

Hello. Thank you for contacting the Toolset support.

Could you please share admin access details and problem URL and exact steps I will have to follow to see both the issues.

*** Please make a FULL BACKUP of your database and website.***
I would also eventually need to request temporary access (WP-Admin and FTP) to your site. Preferably to a test site where the problem has been replicated if possible in order to be of better help and check if some configurations might need to be changed.

I have set the next reply to private which means only you and I have access to it.

#2602369

Minesh
Supporter

Languages: English (English )

Timezone: Asia/Kolkata (GMT+05:30)

I can see that you have added the custom field filter as date filter for the custom field "wpv-conf-date" - do you mean that you want to match the fields Container Confirmation Date and Shipment Confirmation Date equal to selected conf-date?

#2602411

Yes that's what I am looking to do Minesh. Let me know if you need further info!

Thanks,
Matt

#2603145

Minesh
Supporter

Languages: English (English )

Timezone: Asia/Kolkata (GMT+05:30)

Can you please check now.

I've adjusted the code added to "Custom Code" section as given udner:

add_filter('wpv_filter_query', 'func_filter_by_multiple_relationships_same_parent',99,3 );
function func_filter_by_multiple_relationships_same_parent( $query_args, $view_settings, $view_id ) {
    if ( $view_id == 758 && isset($_GET['wpv-relationship-filter']) and $_GET['wpv-relationship-filter']!=0) {
      
      $parent_id = $_GET['wpv-relationship-filter'];
  
 
            $related_containers = toolset_get_related_posts(
                            $parent_id,
                            'warehouse-container',
                            'parent',
                            999,
                            0,
                            array(),
                            'post_id',
                            'child'
                            );
            
       $related_shipments = toolset_get_related_posts(
                            $parent_id,
                            'warehouse-shipments',
                            'parent',
                            999,
                            0,
                            array(),
                            'post_id',
                            'child');
      
      $query_args['post__in'] = array_merge($related_shipments,$related_containers);
      
    }
    return $query_args;
}

I can see the results it shows is less than the selected date.

#2603361
Inventory Totals   YLS Test.png

Hi Minesh,

Unfortunately it doesn't appear to be working. I tested by selecting the date April 15th 2023 and it is still returning posts with dates prior to that as seen in the screenshot. I tested both with and without assigning a warehouse filter, same results.

Thanks,
Matt

#2603945

Minesh
Supporter

Languages: English (English )

Timezone: Asia/Kolkata (GMT+05:30)

I see why its not working could be because I see there is another filter added that applies OR condition for all the custom field query.

add_filter( 'wpv_filter_query', 'wpv_filter_query_func', 1000 , 3 );
function wpv_filter_query_func( $query_args, $view_settings ) {
    // process if specific view
    if ( ( isset($view_settings['view_id']) && $view_settings['view_id'] == 758) ) {
        if( !empty($query_args['meta_query']) ) {
            $query_args['meta_query']['relation'] = 'OR';
        }
    }
    return $query_args;
}

What clause you want to apply between your query filters?

Select items with field:
Container Status is a number equal to 2
AND
Shipment Status is a string equal to 2
AND
Shipment Confirmed Date is a number lower than or equal URL_PARAM(wpv-conf-date)
AND
Container Confirmed Date is a number lower than or equal URL_PARAM(wpv-conf-date)

is above is correct?

#2604075

I think for this to work correctly it would need to have mixed AND/OR conditions something like this:

Select items with field:
[Container Status is a number equal to 2
AND
Container Confirmed Date is a number lower than or equal URL_PARAM(wpv-conf-date)]
OR
[Shipment Status is a string equal to 2
AND
Shipment Confirmed Date is a number lower than or equal URL_PARAM(wpv-conf-date)]

I tested by turning off the 'query-with-or' code snippet, and I saw no change in search behavior. But I'm not sure why using AND returns any results at all. A single post in this view (container/shipment) can't both be Container Status = 2 and Shipment Status = 2 so how is that returning anything at all?

I really appreciate your help on this Minesh, it's been driving me nuts for a bit now.

#2604399

Minesh
Supporter

Languages: English (English )

Timezone: Asia/Kolkata (GMT+05:30)

Can you please check now:
=> hidden link

I've adjusted the code added to the "Custom Code" section as given under:

add_filter('wpv_filter_query', 'func_filter_by_multiple_relationships_same_parent',99,3 );
function func_filter_by_multiple_relationships_same_parent( $query_args, $view_settings, $view_id ) {
    if ( $view_id == 758) {
      
      $meta_args = $query_args['meta_query'];
      $remove_meta_args = array();
      $remove_meta_args = array('wpv-conf-date');
      foreach($meta_args as $k=>$v):
      	if( in_array($v['key'],$remove_meta_args) ) {
          unset($query_args['meta_query'][$k]);
        }
      endforeach;
        
      if(isset($_GET['wpv-relationship-filter']) and $_GET['wpv-relationship-filter']!=0) {
      
      $parent_id = $_GET['wpv-relationship-filter'];
  
 
            $related_containers = toolset_get_related_posts(
                            $parent_id,
                            'warehouse-container',
                            'parent',
                            999,
                            0,
                            array(),
                            'post_id',
                            'child'
                            );
            
       $related_shipments = toolset_get_related_posts(
                            $parent_id,
                            'warehouse-shipments',
                            'parent',
                            999,
                            0,
                            array(),
                            'post_id',
                            'child');
      
      $query_args['post__in'] = array_merge($related_shipments,$related_containers);
      
    }
      
    if(isset($_GET['wpv-conf-date']) and $_GET['wpv-conf-date']!='') {
      
  	  $start =  $_GET['wpv-conf-date'];
      $end = $_GET['wpv-conf-date']+(60*60*24);
     
      
      $new_meta_query = array('relation'=>'OR',
                               array('relation'=>'AND',
                                     array('key'=>'wpcf-container-status',
                                    	'value'=>2,
                                    	'type'=>'NUMERIC',
                                        'compare'=>'='),
                                     array('key'=>'wpcf-container-confirmed-date',
                                    	'value'=>"$start,$end",
                                    	'type'=>'NUMERIC',
                                        'compare'=>'BETWEEN'),
                                    ),
                              	array('relation'=>'AND',
                                     array('key'=>'wpcf-shipment-status',
                                    	'value'=>2,
                                    	'type'=>'NUMERIC',
                                        'compare'=>'='),
                                     array('key'=>'wpcf-shipment-confirmed-date',
                                    	'value'=>"$start,$end",
                                    	'type'=>'NUMERIC',
                                        'compare'=>'BETWEEN'),
                                    ),
                             
                             );
       
      $query_args['meta_query'] =  $new_meta_query;
      
    }
      
    }
    return $query_args;
}

Can you please confirm it works as expected.

#2606143

Thanks Minesh! Fantastic support sir!