field name) $GLOBALS['my_query_filters'] = array( 'fundtarget' => 'os_fund_target', 'fundsource' => 'os_fund_source', 'fundfield' => 'os_fund_field' ); $GLOBALS['my_query_filters_dates'] = array( 'fundapplybegin' => 'os_fund_apply_begin', 'fundapplyend' => 'os_fund_apply_end' //'fundcall' => 'os_fund_call', ); // action add_action('pre_get_posts', 'my_pre_get_posts',10,1); function my_pre_get_posts( $query ) { // bail early if is in admin if( is_admin() ) { return; } // bail early if not main query or plugin $the_query_ajut // - allows custom code / plugins to continue working if( !$query->is_main_query() ) return; // loop over filters foreach( $GLOBALS['my_query_filters'] as $key => $fieldname) { // continue if not found in url if( empty($_GET[ $fieldname ]) ) { continue; } // get original meta query $meta_query = []; $meta_query[] = $query->get('meta_query'); $meta_query[] = array('relation' => 'OR'); // get the values for this filter // eg: http://domain.tdl/ajut/?os_fund_target=autonoma,entitat-publica $filtervalues= explode(',', $_GET[ $fieldname ]); // loop retreived values from checkboxes and filter them with REGEXP // http://domain.tdl/ajut/?os_fund_target=autonoma&os_fund_field=circi // http://domain.tdl/ajut/?os_fund_target=autonoma,entitat-publica&os_fund_field=dansa foreach( $filtervalues as $filteredvalue ) { // they are array based fields // https://barn2.com/blog/querying-posts-by-custom-field-acf/#array-based-fields $strippedvalue = sprintf( '^%1$s$|s:%2$u:"%1$s";', $filteredvalue, strlen( $filteredvalue ) ); // add our meta query to the original meta queries $meta_query[] = array( array( 'key' => $fieldname, 'value' => $strippedvalue, 'compare' => 'REGEXP', ), ); } // update the meta query arguments $query->set('meta_query', $meta_query); } //always return return; }