Ежегодный Архив с пользовательской даты exchangeox (Дата начала мероприятия)

Я создал пользовательский post_type called (event), и вот код

// Register Custom Post Type Events function custom_post_type_events() { $labels = array( 'name' => _x( 'Events', 'Post Type General Name', 'text_domain' ), 'singular_name' => _x( 'Event', 'Post Type Singular Name', 'text_domain' ), 'menu_name' => __( 'Events', 'text_domain' ), 'parent_item_colon' => __( '', 'text_domain' ), 'all_items' => __( 'All Events', 'text_domain' ), 'view_item' => __( 'View Event', 'text_domain' ), 'add_new_item' => __( 'Add New Event', 'text_domain' ), 'add_new' => __( 'New Event', 'text_domain' ), 'edit_item' => __( 'Edit Event', 'text_domain' ), 'update_item' => __( 'Update Event', 'text_domain' ), 'search_items' => __( 'Search events', 'text_domain' ), 'not_found' => __( 'No events found', 'text_domain' ), 'not_found_in_trash' => __( 'No events found in Trash', 'text_domain' ), ); $args = array( 'label' => __( 'event', 'text_domain' ), 'description' => __( 'Events information pages', 'text_domain' ), 'labels' => $labels, 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'trackbacks', 'revisions', 'custom-fields', 'post-formats', ), 'taxonomies' => array( 'category', 'post_tag' ), 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_admin_bar' => true, 'menu_position' => 5, 'menu_icon' => admin_url() . '/images/ef-events-icon.png', // Icon Path 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => true, 'publicly_queryable' => true, 'capability_type' => 'page', ); register_post_type( 'event', $args ); } // Hook into the 'init' action add_action( 'init', 'custom_post_type_events', 0 ); 

Затем я создал пользовательскую дату meta_box для этого события post_type, и вот код

  add_filter( 'cmb_meta_boxes', 'dt_person_meta_boxes' ); function dt_person_meta_boxes( $meta_boxes ) { $meta_boxes[] = array( 'id' => 'dt_metabox', 'title' => 'Event Date and Time', 'pages' => array('event'), 'context' => 'side', 'priority' => 'high', 'show_names' => true, // Show field names on the left 'fields' => array( array( 'name' => 'Event Start Date', 'desc' => 'Pick the date of this event', 'id' => $prefix . 'event_starttextdate', 'type' => 'text_date' ), array( 'name' => 'Event End Date', 'desc' => 'Pick the date of this event', 'id' => $prefix . 'event_endtextdate', 'type' => 'text_date' ), array( 'name' => 'Event Time', 'desc' => 'Enter event time (eg. 05:00 pm)', 'id' => $prefix . 'event_time', 'type' => 'text', 'save' => true ) ) ); return $meta_boxes; } 

Мой вопрос:

Как создать страницу пользовательского архива для пользовательского post_type (event), который будет сортировать события по настраиваемому мета-поле (event_starttextdate) ???

Пример:

2013

  • Event-1
  • Event-2

2012

  • Event-3
  • Event-4

2011

  • Event-5
  • Event-6
  • Event-7
  • Event-8

Ваша помощь приветствуется, спасибо.

Я только что закодировал обходное решение для этой проблемы, если кто-то заинтересован в моем решении:

  • Это решение использует опцию Bootstrap Navs , поэтому вам нужно сначала загрузить Bootstrap и связать его в своем заголовке или файле индекса.

  • Пожалуйста, внимательно прочитайте комментарии в приведенном ниже коде, чтобы понять, что произошло

Решение (код):

  <?php /* Template Name: Archives Events */ echo '<div class="tabbable">';/* Start Bootstrap Tabs Parent Div (tabbable) */ $args = array( 'post_type' => 'event',/* Change with your custom post type name */ 'meta_key' => 'event_starttextdate',/* Change with your custom date metabox (Event Start Date) */ 'orderby'=> 'meta_value', 'order' => 'ASC', ); /* Important Variables */ $emptyvalue = ""; $optionname = "optionname"; $the_query = new WP_Query($args); /* Start Bootstrap Tabs ul */ echo '<ul class="nav nav-tabs">'; /* Query Posts (Events) */ $arr = array(); while ( $the_query->have_posts() ) : $the_query->next_post(); $id= $the_query->post->ID; /* Get all dates of posts from the custom date metabox (Event Start Date) */ $evestdate = get_post_meta($id, 'event_starttextdate', true); /* Strtime the year from the results */ $this_month = strtotime($evestdate); $cuseveyear = date( 'Y', $this_month ); $archiveyear = $cuseveyear; $archiveyears = $archiveyear; /* Remove duplicated years */ if(!in_array($archiveyear, $arr)){ array_push($arr, $archiveyear); $get_archiveyear = $_GET['institution-archiveyear']; /* For each year do the following */ foreach( (array) $archiveyears as $archiveyear ) { echo '<li>';/* create li and a href for each year */ echo "<a class='archiveyear' href='#".$archiveyear."' data-toggle='tab'>"; /* href is equal to the result year */ echo $archiveyear ; echo '</a>'; echo '</li>'; } } endwhile; echo '</ul>'; /* End Bootstrap Tabs ul */ ?> <?php $args = array( 'post_type' => 'event',/* Change with your custom post type name */ 'meta_key' => 'event_starttextdate',/* Change with your custom date metabox (Event Start Date) */ 'orderby'=> 'meta_value', 'order' => 'ASC', ); /* Important Variables */ $emptyvalue = ""; $optionname = "optionname"; $the_query = new WP_Query($args); /* Start Bootstrap Tab content div */ echo '<div class="tab-content">'; $arr = array(); /* Query Posts (Events) */ while ( $the_query->have_posts() ) : $the_query->next_post(); $id= $the_query->post->ID; /* Get all dates of posts from the custom date metabox (Event Start Date) */ $evestdate = get_post_meta($id, 'event_starttextdate', true); /* Strtime the year from the results */ $this_month = strtotime($evestdate); $cuseveyear = date( 'Y', $this_month ); $archiveyear = $cuseveyear; $archiveyears = $archiveyear; /* Remove duplicated years */ if(!in_array($archiveyear, $arr)){ array_push($arr, $archiveyear); $get_archiveyear = $_GET['institution-archiveyear']; /* For each year do the following */ foreach( (array) $archiveyears as $archiveyear ) { /* create Bootstrap div tab-pane */ echo "<div class='tab-pane' id='".$archiveyear."'>"; $argss = array( 'post_type'=> 'event', ); $the_query = new WP_Query( $argss ); while ( $the_query->have_posts() ) : $the_query->the_post(); /* Get all dates of posts from the custom date metabox (Event Start Date) */ $evestdate_single = get_post_meta( $post->ID, 'event_starttextdate', true ); /* Strtime the year from the results */ $this_month_single = strtotime($evestdate_single); $cuseveyear_single = date( 'Y', $this_month_single ); $cuspermalink = get_post_permalink($id); /* If the result year is equal to the archive year do the following */ if ($cuseveyear_single == $archiveyear) { echo '<p style="border-bottom:1px solid #DDDDDD;padding:0;padding-bottom:5px;margin-left:100px;">'; echo "<a href='".$cuspermalink."'>"; echo the_title(); echo '</a>'; echo '</p>'; } endwhile; } echo '</div>';/* End Bootstrap div tab-pane */ } endwhile; echo '</div>';/* End Bootstrap Tab content div */ echo '</div>';/* End Bootstrap Tabs Parent Div (tabbable) */ ?>