Skip Navigation

[Resolved] Custom Field Query Filter

This thread is resolved. Here is a description of the problem and solution.

Problem:
How to filter view by custom field of third party plugin/theme which stores serialize data.

Solution:
You can use 'wpv_filter_query" filter to filter your view with custom fields with serialize data.

When displaying a View listing posts, this filter is applied to the arguments being generated by the View settings before they are passed to the WP_Query class. That means you can add/remove query on fly.

You can find the proposed solution with the following reply:
https://toolset.com/forums/topic/custom-field-query-filter/#post-404625

Relevant Documentation:

  • Read the wpv_filter_query documentation for more information
  • Learn more about WP_query and how to use it in WordPress.
This support ticket is created 7 years, 9 months ago. There's a good chance that you are reading advice that it now obsolete.

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)

Tagged: 

This topic contains 6 replies, has 2 voices.

Last updated by bambiM 7 years, 9 months ago.

Assisted by: Minesh.

Author
Posts
#404560
query-filter.png
postmeta-table.jpg

Hi,

I'm trying to add "Query Filter" for a custom field set by the theme that I purchased. The problem is, I don't know how to filter custom field having multiple values (see database under postmeta table and views query filter, screenshot attached).

Custom Field (meta_key):
event_details

Values (meta_value):
• event_date_from: 07/01/2016
• event_date_to: 07/01/2016

I need to filter Upcoming Events and Past Events using event_date_from and event_date_to.

Need your help guys! Thanks in advance.

#404609

Minesh
Supporter

Languages: English (English )

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

Hello. Thank you for contacting the Toolset support.

You can not filter view with such field which have multiple values using views filter. For such field I suggest you need to use view's filter hook: 'wpv_filter_query".

When displaying a View listing posts, this filter is applied to the arguments being generated by the View settings before they are passed to the WP_Query class. That means you can add/remove query on fly.

For example:

add_filter( 'wpv_filter_query', 'limit_time_on_query', 99, 3 );
function limit_time_on_query($query_args, $view_setting, $view_id) 
{
 if ($view_id == 999) {
    /// ADJUST your query_arguments with your meta query here as per your custom field as meta key and meta values here
 }
    return $query_args;
}

Where:
Please change "999" with your original view id.

More info:
https://toolset.com/documentation/user-guides/views-filters/wpv_filter_query/

I hope above solution will help you to resolve your issue.

#404623

Hi Minesh,

Thank you for your quick response. I'm not a typical back-end developer. Can you give an example of meta_query inside of your sample statement?

#404625

Minesh
Supporter

Languages: English (English )

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

Please check following code that may help you:

add_filter( 'wpv_filter_query', 'custom_search_criteria',10,2 );
function custom_search_criteria( $query_args ,$view_settings ) {
 if (isset($view_settings['view_id']) && $view_settings['view_id'] == 14840 ) {
    
             $index = 0;
             if(isset($query_args['meta_query'])){
                $index = count($query_args['meta_query'])+1; 
             }
             $query_args['meta_query'][$index] =   array(
                        'relation' => 'AND', 
                           array(
                                'key' => 'cf-college-cost-instate',
                                'value' => '',
                                'compare' => '!=',
                        ),
                        array(
                                'key' => 'cf-college-employed',
                                'value' => '',
                                'compare' => '!=',
                        ),
                        array(
                                'key' => 'cf-college-finaid',
                                'value' => '',
                                'compare' => '!=',
                        )
        );
     
}
return $query_args;
}

This will requie some PHP and Database knowldege to build such solution that is called custom programming.

More example:
https://toolset.com/forums/topic/parametric-search-by-year-range-2-numeric-fields/#post-298046

#404631

This will help me a lot. Thanks! I will let you know once I solve it.

Thanks for your help.

#404634

Minesh
Supporter

Languages: English (English )

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

ok fine - thank you!!

#404955

Marked as resolved.

This ticket is now closed. If you're a WPML client and need related help, please open a new support ticket.