field name) $GLOBALS['my_query_filters_convo'] = array( 'convofield' => 'os_convo_field', //disciplines 'convoterritory' => 'os_convo_territory', //territori 'convoservice' => 'os_convo_service', //serveis 'convocenter' => 'os_convo_center' //centre ); $GLOBALS['my_query_filters_convo_dates'] = array( 'convoapplybegin' => 'os_convo_apply_begin', 'convoapplyend' => 'os_convo_apply_end' //'convocall' => 'os_convo_call', ); // action add_action('pre_get_posts', 'my_pre_get_posts_convos',10,1); if ( ! function_exists( 'my_pre_get_posts_convos' ) ){ function my_pre_get_posts_convos( $query ) { // bail early if is in admin if( is_admin() ) { return; } // bail early if not main query or plugin $the_query_convo // - allows custom code / plugins to continue working if( !$query->is_main_query() ) return; // loop over filters foreach( $GLOBALS['my_query_filters_convo'] 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/convo/?os_convo_target=autonoma,entitat-publica $filtervalues= explode(',', $_GET[ $fieldname ]); // loop retreived values from checkboxes and filter them with REGEXP // http://domain.tdl/convo/?os_convo_target=autonoma&os_convo_field=circi // http://domain.tdl/convo/?os_convo_target=autonoma,entitat-publica&os_convo_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; } }