When your website means business.

ACF, PHP, WP Query, WP/CP | Type: PHPFilter Custom Post Type by Custom Fields

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(); 
 ?>

Reference Links

Menu
We use cookies in order to give you the best possible experience on our website. By continuing to use this site, you agree to our use of cookies.
Accept
Cookies Notice