• I’ve created a custom post type for events that uses a custom field to retrieve the date for the event. It works ok and I’m able to filter the displayed results using meta_compare to compare the date value to the current date.

    So far so good. I can also filter the admin end to display either future or past events (or both, by removing the meta compare) via a pre get posts filter.

    What I want to do is to create an admin page that will display the past events. I’ve created the page (and menu item) with the following code:

    add_action('admin_menu', 'add_concerts_page');
    function add_concerts_page() {
        add_submenu_page('edit.php?post_type=concerts', 'Concerts Archive', 'Concerts Archive', 'manage_options', 'concerts-archive', 'my_archive_function' );
    }
    
    function my_archive_function() {}

    But I don’t know how to write the function!! I can write a regular loop and filter the results, as I would do on the front-end, but all I need to do is to show the same information as the normal admin page, but showing events that have since passed.

    This is how I filter the custom posts edit screen to show only future events:

    function concerts_pre_get_posts($query) {
      if (is_admin()) {
        if (isset($query->query_vars['post_type'])) {
          if ($query->query_vars['post_type'] == 'concerts') {
              $query->set('meta_key', 'date_value');
              $query->set('orderby', 'meta_value');
              $query->set('order', 'ASC');
        $query->set('meta_compare', '>=');
              $query->set('meta_value', time());
    
          }
        }
      }
    }
    add_filter('pre_get_posts' , 'concerts_pre_get_posts');

    I don’t really need to create a separate archive page for past events, just a link to toggle the query from past to future events on this page would be groovy, but I haven’t a clue how to go about doing this!

    All help greatly appreciated!

  • The topic ‘Custom post admin filtering by post meta (the date)’ is closed to new replies.