I have a custom post type registered (our-team) and I have a taxonomy (team-categories) with multiple terms. Each term has multiple posts assigned to it. On my custom post type archive (archive-our-team.php) I am using the code below to separate my loop by term, which is working great, but defaults to alphabetical ordering by term:
A Term Name
– all posts in this term
B Term Name
– all posts in this term
C Term Name
– all posts in this term
I can’t figure out how to customize the order of the terms so I can get something like (any order I want):
C Term Name
– all posts in this term
A Term Name
– all posts in this term
B Term Name
– all posts in this term
Is there a way to set an order number for each term in a taxonomy, so when I get_terms
and then output with foreach
they are in the order I want?
<?php //for a given post type, return all
$post_type = 'our-team';
$tax = 'team-categories';
$tax_terms = get_terms($tax);
if ($tax_terms) {
foreach ($tax_terms as $tax_term) {
$args=array(
'post_type' => $post_type,
"$tax" => $tax_term->slug,
'post_status' => 'publish',
'posts_per_page' => -1,
);
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
echo '<h2 style="clear:both;">'.$tax_term->name.'</h2>';
while ($my_query->have_posts()) : $my_query->the_post();
//set vars for custom fields
$team_location = get_field('team_location');
$team_position = get_field('team_position');
$team_email = get_field('team_email');
$team_name = get_the_title();
$team_link = get_permalink();
//get only first name. usage: echo $first_name[0];
$team_first_name = $team_name;
$first_name = explode(' ', trim($team_first_name));
?>
<div class="team_member">
<?php if ( has_post_thumbnail()) { ?>
<a class="thickbox" href="<?php echo $team_link; ?>"><?php the_post_thumbnail('medium'); ?></a>
<?php } else { ?>
<img src="<? bloginfo('template_directory' );?>/library/images/no_pic.jpg" alt="no image provide" />
<?php } ?>
<div class="team_member_info">
<h2><?php the_title();?></h2>
<p><a class="thickbox" href="<?php echo $team_link; ?>">More info <?php// echo $first_name[0]; ?></a></p>
<?php if ($team_email) : ?><p><a href="mailto:<?php echo $team_email;?>">Email <?php echo $first_name[0]; ?></a></p><?php endif; ?>
</div>
</div> <?php
endwhile;
}
}
}
?>
You can use this awesome plugin to give a sort order for taxonomy. It’s old but still work on WordPress 3.6 and probably the latest version too.
My solution was to store the term order as metadata for the post.
Then when I retrieve the terms I can order them by id. More detailed explaination here: Control term order on a per-post basis