Pagination not working on my archive page for a custom post type

First off I have a custom post type called events, and I wrote a custom query in in my archive-events.php file. Everything is working great except for the pagination.

To trouble shoot I stripped everything out except for the essentials and pagination was working Perfectly. After a lot of googling I think my issue might be that I need to write my query as a function in the functions.php file. Something like this:

function set_posts_per_page_for_events_cpt( $query ) {
  if ( !is_admin()  $query-is_main_query()  is_post_type_archive( 'events' ) ) {
    $query-set( 'posts_per_page', '5' );
  }
}
add_action( 'pre_get_posts', 'set_posts_per_page_for_events_cpt' );

I'm totally fine with this, but I'm not sure how to rewrite my query so that it works. This is my query:

?php
$currentdate = date("Y-m-d",mktime(0,0,0,date("m"),date("d"),date("Y")));

$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;

$wp_query = new WP_Query(  array (
'post_type' = 'events',
'meta_query'= array(
    array(
       'key' = 'event_date',
       'compare' = '',
       'value' = $currentdate,
       'type' = 'DATE',
    )),
    'meta_key' = 'event_date',
    'orderby' = 'meta_value',
    'order' = 'ASC',
    'posts_per_page' = 12,
    'paged' = $paged,
    )
); ?

?php if( $wp_query-have_posts() ): ?
?php while( $wp_query-have_posts() ) : $wp_query-the_post(); ?
!-- All My Events --
?php endwhile;?
?php echo paginate_links(); ?
?php endif; ?

If I'm totally wrong on this please let me know. Any help or a point into the right direction is greatly appreciated.

Topic meta-query custom-post-type-archives functions pagination query-posts Wordpress

Category Web


So I got this to work by adding this function to functions.php

// Custom query for events
function set_posts_per_page_for_events_cpt( $query ) {
  if ( !is_admin() && $query->is_main_query() && is_post_type_archive( 'events' ) ) {

        // set date
        $currentdate = date("Y-m-d",mktime(0,0,0,date("m"),date("d"),date("Y")));

        $meta_query = array(
             array(
                'key'=>'event_date',
                'compare' => '>=',
                'value'=> $currentdate,
                'type' => 'DATE',
             ),
        );

        $query->set('meta_query', $meta_query);
        $query->set( 'posts_per_page', '12' );
        $query->set( 'meta_key', 'event_date' );
        $query->set( 'orderby', 'meta_value' );
        $query->set( 'order', 'ASC' );
      }
}
add_action( 'pre_get_posts', 'set_posts_per_page_for_events_cpt' );

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.