0

I have two post types. One is post & other one is event. Both sharing same categories & tags. I am listing the posts by archive.php. Now I am listing the posts as general by two different templates like archive.php / archive-event.php. But now I want to list them in a single template with mixing the posts and order by date.

So any one would help me in this regard.

  • Use pre_get_posts to add post and event types to archive pages – Pieter Goosen Jul 24 '14 at 11:46
  • How to set two post types in that function. Could you please explain this? – Girija Sankar Dash Jul 24 '14 at 12:15
  • Do you need to display them in archive.php. Or in a page.php type template. Or in where? – Pieter Goosen Jul 24 '14 at 12:34
  • I need to list them in archive.php file. – Girija Sankar Dash Jul 24 '14 at 12:43
1

As I already mentioned in my comments, you must use pre_get_posts to add custom post types to archive pages.

One thing you must keep in mind here though, you have two archive pages here, archive.php and archive-event.php, so is_archive() is going to return true on both, which will alter both pages. You will need to exclude archive-event.php from your function. To do this, you'll need to make use of is_post_type_archive() to check and exclude that specific page

For all the possible parameters you can use with pre_get_posts, go have a look at WP_Query

function cpt_in_archive($query) {
  if ( !is_admin() && $query->is_main_query() && $query->is_archive() && $query->!is_post_type_archive( 'event' )) {

      $query->set( 'post_type', array( 'post', 'event' ) );
      $query->set( 'orderby', 'date' );

   }
}

add_action( 'pre_get_posts' , 'cpt_in_archive' );

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.