UPDATED January 2023 to work with PHP8.
<form method="post" action="" onsubmit="return false"> <select name="trngregion" id="region" class="postform" onchange="submit();"> <!--establish 'sort value'--> <option <?php selected( isset($_POST['trngregion']) ? $_POST['trngregion'] : '', 'All Regions' ); ?> value="All Regions">All Regions (default)</option> <option <?php selected( isset($_POST['trngregion']) ? $_POST['trngregion'] : '', 'Albuquerque' ); ?> value="Albuquerque">Albuquerque</option> <option <?php selected( isset($_POST['trngregion']) ? $_POST['trngregion'] : '', 'Farmington' ); ?> value="Farmington">Farmington</option> <option <?php selected( isset($_POST['trngregion']) ? $_POST['trngregion'] : '', 'Las Cruces' ); ?> value="Las Cruces">Las Cruces</option> <option <?php selected( isset($_POST['trngregion']) ? $_POST['trngregion'] : '', 'Rio Rancho' ); ?> value="Rio Rancho">Rio Rancho</option> <option <?php selected( isset($_POST['trngregion']) ? $_POST['trngregion'] : '', 'Roswell' ); ?> value="Roswell">Roswell</option> <option <?php selected( isset($_POST['trngregion']) ? $_POST['trngregion'] : '', 'Santa Fe' ); ?> value="Santa Fe">Santa Fe</option> </select> </form> <?php $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; $today = date('Ymd', strtotime('-6 hours')); if ((empty($_POST['trngregion'])) || ($_POST['trngregion'] == 'All Regions')) { //if 'sort value' not selected $traininglist= new WP_Query( array( //this is the basic query without region selected (the easy part) 'post_type' => 'training', 'posts_per_page' => 6, 'paged' => $paged, 'meta_key' => 'trng_startdate', 'orderby' => 'meta_value', 'order' => 'ASC', 'meta_query' => array( array( 'key' => 'trng_endate', 'meta-value' => $value, 'value' => $today, 'compare' => '>=', 'type' => 'CHAR' ) ) ) ); } else { <strong>//if sort value exists, the query that compares sort value and custom field value</strong> $trainingregion = $_POST['trngregion']; //get 'sort value' $traininglist= new WP_Query( array( 'post_type' => 'training', 'posts_per_page' => -1, //unlimited posts keeps paging from resetting sort 'paged' => $paged, 'meta_key' => 'trng_startdate', 'orderby' => 'meta_value', 'order' => 'ASC', 'meta_query' => array( 'relation' => 'AND', //add query that compares 'sort value' with 'custom field value' array( 'key' => 'trng_endate', 'meta-value' => $value, 'value' => $today, 'compare' => '>=', 'type' => 'CHAR' ), array( //add query that compares 'sort value' with 'custom field value' 'key' => 'trng_region', //custom field 'value' => $trainingregion, //sort value 'type' => 'CHAR', 'compare' => '=' ) ) ) ); } if ($traininglist->have_posts()) : if ($trainingregion) { echo '<div class="trngfilter"><h2>'.$trainingregion.' Training Events</h2></div>'; //heading for sorted results } while ( $traininglist->have_posts() ) : $traininglist->the_post(); ?>
Display results here
<?php endwhile; else : echo '<p>There are no upcoming '.$trainingregion.' trainings listed.</p>'; //message for no result endif; wp_pagenavi( array( 'query' => $traininglist ) ); wp_reset_query(); ?>