Support

Account

Home Forums General Issues Filtering WP_Query results by select field Reply To: Filtering WP_Query results by select field

  • Things will need to be rearranged a bit, you just need to move the h2 and the starting table element to after the if statement and move the closing table element to before the end of the if block. You can also move the reset until after your term loop, there isn’t really any reason to reset the post data until after you done looping through the terms.

    
    function honour_roll_loop() {
        //Args for Categories
    	$args = array(
        'orderby'           => 'id', 
        'order'             => 'ASC',
    );
         echo "<h1>" . get_the_title() . "</h1>";
        $terms = get_terms("category",$args);
        $count = count($terms);
        
    if ( $count > 0 ){
        foreach ( $terms as $term ) {
           $loop = new WP_Query( array( 
                'post_type' => 'recipient',
                'post_per_page' => 100,
                'meta_key' => 'year',
                'orderby' => 'meta_value_num',
                'order' => 'DESC',
                'tax_query' => array(
    
                    array(
                        'taxonomy' => 'category',
                        'field' => 'id',
                        'terms' => $term->term_id
                    )
                ),
                meta_query => array(
                    array(
                        'key' => 'year',
                        'value' => '2008'
                    )
                )
            ));
            // the loop
            if($loop->have_posts()):
            echo '<h2>' . $term->name . '</h2>';
            echo '<table>';
            while ($loop->have_posts()) : $loop->the_post();
            
            //Variables
    		$year = get_post_meta(get_the_ID() , 'year', true); //custom field
            $org = get_post_meta(get_the_ID() , 'recipient_organisation', true); //custom field
            $awarded = get_field_object('field_564bc3aa81a9f');
                // do loop content
                echo '<tr>';
                echo '<td>' . $year . '</td>';
                echo '<td>' . $awarded['value'] . '</td>';
                echo '<td>' . get_the_title() . '</td>';
                echo '<td>' . $org . '</td>';
                echo '</tr>';
            
            endwhile;
            echo '</table>';
            endif;
        }
    		
            // reset $post so that the rest of the template is in the original context
            wp_reset_postdata();
    }
    }