WordPress: Custom post type segregation on Category page

I’ve got two custom post types, for example ‘Cars’ and ‘Bikes’. I’ve used WordPress’s default category to categorise the posts from the two post types. Let’s say for example the categories are ‘Red’, ‘Blue’ and ‘Black’.

What I’m trying to achieve here is that when I go to the category page for ‘Red’, I want to see the ‘Cars’ and the ‘Bikes’ that are categorised under ‘Red’. I’m using the category.php and this is the query that I’m trying to run:

$car_args = array(
                    'posts_per_page'   => -1,
                    'orderby'          => 'date',
                    'order'            => 'DESC',
                    'post_type'        => 'cars',
                    'post_status'      => 'publish',
                    'cat'              => $cat
                );

                // The Query
                $car_query = new WP_Query( $car_args );

                // The Loop
                if ( $car_query ->have_posts() ) {
                echo "<h3>Cars</h3>";
                    while ( $car_query->have_posts() ) {
                        $car_query->the_post();
                        echo get_post_type() . '<a href="'. get_permalink() .'">' . get_the_title() . '</a><br />';
                    }
                } else {
                    // no posts found
                }

$bikes_args = array(
                    'posts_per_page'   => -1,
                    'orderby'          => 'date',
                    'order'            => 'DESC',
                    'post_type'        => 'bikes',
                    'post_status'      => 'publish',
                    'cat'              => $cat
                );

                // The Query
                $bikes_query = new WP_Query( $bikes_args );

                // The Loop
                if ( $bikes_query ->have_posts() ) {
                echo "<h3>Bikes</h3>";
                    while ( $bikes_query->have_posts() ) {
                        $bikes_query->the_post();
                        echo get_post_type() . '<a href="'. get_permalink() .'">' . get_the_title() . '</a><br />';
                    }
                } else {
                    // no posts found
                }

                /* Restore original Post Data */
                wp_reset_postdata();

The $cat in the query gets the category id of ‘Red’ category. Both these queries are correctly restricting the posts by the ‘Red’ category but posts from both the ‘Cars’ post type and ‘Bikes’ post type are showing up even though I’ve tried to restrict by post type. I’ve read in a few articles that WordPress ignores the post type args on the category page. Is this true and if it is, is there a workaround for this?


Source: wordpress

Leave a Reply