How do I sort posts by custom taxonomy?

I am trying to sort posts by custom taxonomy. I have a custom post type which is course-cpt and I have created custom taxonomies within it, I need to sort the courses by course-level (which is the taxonomy term) so that it displays like so:

  • Course Name level 1
  • Course Name level 2
  • Course Name level 3 etc

I currently have the following in my functions.php:

add_action( 'pre_get_posts', 'reorderByCourseLevel' );

function reorderByCourseLevel( $query ) {

if ( $query->is_main_query() && !is_admin() ) {
        if ( $query->is_tax() || $query->is_post_type_archive('subject') ) {
            $taxquery = array(
               'taxonomy' => 'course-level'
            );
            $query->set('tax_query', $taxquery);
            $query->set('orderby', 'title');   
            $query->set('order', 'ASC');
       }       
    }
}

Am I missing anything in my code..?

1 Answer
1

If I understand your question correctly, I think I may have your answer in this blog post:
https://evowebdev.com/2017/05/using-a-dropdown-menu-to-filter-a-custom-post-type-with-custom-taxonomy/

This solution specifically uses select form element auto-populated with taxonomy terms to sort CPT posts (ie, rather than presorting posts with pre_get_posts, it lets site visitors sort by the taxonomy term[s] they select). If it’s really important to pre-sort, this may not be an answer for you.

I could see it being useful, however, to allow people to select to view all courses of one of the levels.

That said, wouldn’t the following presentation occur with alpha order?

  • Course Name level 1
  • Course Name level 2
  • Course Name level 3

Leave a Comment