Hello all,
I have a custom post type named "coaches"
That post type is using regular categories. The categories are named like the following:
17-2
16-1
18-1
15-3
Since the category names are actually numbers I'm struggling to list the posts in order. Currently I can only get the coaches to order by title. I'd like my wp_query to order the coaches by category name/number, like the following:
18-1
17-2
16-1
15-3
Link to the live page:
[[LINK href="http://wisconsinjuniors.com/staff/coaches/"]]Live Page[[/LINK]]
Link to Pastebin:
[[LINK href="http://pastebin.com/cwf9YejZ"]]Pastebin[[/LINK]]
Arnav Joy answers:
try this
<div class="coaches-list clearfix">
<?php
echo '<div class="clearfix">';
$categories = get_categories('orderby=name');
if( !empty( $categories ) ){
foreach( $categories as $category ){
$args = array(
'cat' => $category ->term_id,
'post_type' => 'coaches',
'orderby' => 'title',
'order' => 'ASC',
'posts_per_page' => -1
);
$i = 1;
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<div class="single-coach">
<a href="<?php the_permalink(); ?>" title="Read <?php the_title(); ?>'s bio">
<?php
$coachname = get_the_title();
$coachphoto = str_replace(' ', '-', $coachname );
$coachphotofull = $coachphoto .".jpg";
$dir = wp_upload_dir();
$fullPhoto = $dir["path"]."/".$coachphotofull;
if( file_exists($fullPhoto) ) {
$urlPhoto = "http://wisconsinjuniors.com/morethanaclub/wp-content/uploads/".$coachphotofull;?>
<img src="<?php echo $urlPhoto ?>" alt="<?php the_title(); ?>" />
<?php
} else { ?>
<img src="http://wisconsinjuniors.com/morethanaclub/wp-content/uploads/wisconsin-juniors-profile-placeholder.jpg" alt="Wisconsin Juniors placeholder profile image" />
<?php
} ?>
</a>
<a href="<?php the_permalink(); ?>" title="Read <?php the_title(); ?>'s bio" class="coach-name"><?php the_title(); ?></a>
<?php
$categories = get_the_category();
$separator = ', ';
$output = '';
if($categories) {
foreach($categories as $category) {
$output .= '<a href="/teams-and-players/'.$category->cat_name.'">'.$category->cat_name.'</a>'.$separator;
}
echo trim($output, $separator);
} ?>
<br />
<?php
if( get_field( 'email_address' ) ): ?>
<a href="mailto:<?php the_field( 'email_address' ); ?>" title="Email <?php the_title(); ?>" target="_blank">Email</a>
<?php
endif; ?>
</div>
<?php
if($i % 4 == 0) {echo '</div><div class="clearfix">';}
$i++; endwhile; endif;
echo '</div>';
wp_reset_postdata();
}
}
?>
</div>
Dave Schmidt comments:
Pretty close, but there's two (2) things I need help with.
I just need the order to be reversed. Currently they're listed out by lowest number to highest number (10-1, 11-1, 18-1) but I need them to go from highest to lowest (18-1, 11-1, 10-1).
The second thing I could use some help with, is getting the i+ logic to work again. I'm adding in a <div class="clearfix">
after every four (4) coaches listings (to make sure > IE9 doesn't break).
Arnav Joy comments:
try this
<div class="coaches-list clearfix">
<?php
echo '<div class="clearfix">';
$categories = get_categories('orderby=name&order=DESC');
$i = 1;
if( !empty( $categories ) ){
foreach( $categories as $category ){
$args = array(
'cat' => $category ->term_id,
'post_type' => 'coaches',
'orderby' => 'title',
'order' => 'ASC',
'posts_per_page' => -1
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<div class="single-coach">
<a href="<?php the_permalink(); ?>" title="Read <?php the_title(); ?>'s bio">
<?php
$coachname = get_the_title();
$coachphoto = str_replace(' ', '-', $coachname );
$coachphotofull = $coachphoto .".jpg";
$dir = wp_upload_dir();
$fullPhoto = $dir["path"]."/".$coachphotofull;
if( file_exists($fullPhoto) ) {
$urlPhoto = "http://wisconsinjuniors.com/morethanaclub/wp-content/uploads/".$coachphotofull;?>
<img src="<?php echo $urlPhoto ?>" alt="<?php the_title(); ?>" />
<?php
} else { ?>
<img src="http://wisconsinjuniors.com/morethanaclub/wp-content/uploads/wisconsin-juniors-profile-placeholder.jpg" alt="Wisconsin Juniors placeholder profile image" />
<?php
} ?>
</a>
<a href="<?php the_permalink(); ?>" title="Read <?php the_title(); ?>'s bio" class="coach-name"><?php the_title(); ?></a>
<?php
$categories = get_the_category();
$separator = ', ';
$output = '';
if($categories) {
foreach($categories as $category) {
$output .= '<a href="/teams-and-players/'.$category->cat_name.'">'.$category->cat_name.'</a>'.$separator;
}
echo trim($output, $separator);
} ?>
<br />
<?php
if( get_field( 'email_address' ) ): ?>
<a href="mailto:<?php the_field( 'email_address' ); ?>" title="Email <?php the_title(); ?>" target="_blank">Email</a>
<?php
endif; ?>
</div>
<?php
if($i % 4 == 0) {echo '</div><div class="clearfix">';}
$i++; endwhile; endif;
echo '</div>';
wp_reset_postdata();
}
}
?>
</div>
Dave Schmidt comments:
That worked, thanks! I just did some CSS magic to fix the clearfix issue.