Intereting Posts
Создание системы онлайн-регистрации и заказа Использование переходных процессов в сочетании с memcached Как я могу развернуть свой сайт InstantWP на веб-сайте? Выделите объявления на несколько секунд Простой пользовательский метабокс не сохраняет Локализовать скрипт не работает Является ли хорошей практикой поиск пользовательских сообщений на основе пользовательских значений полей? Значения по порядку по почте получают случайные результаты Как одновременно обращаться к одной и той же базе данных MySQL в главном столбце и боковой панели WordPress? Как открыть диалог добавления медиа в определенном состоянии / вкладке? Извлечение мета-окна из пользовательского типа Ошибка ресурса 404 при установке подкаталога multisite Как получить значение wpnonce? Изменить всплывающую подсказку в облаке тегов Переписать параметр числового идентификатора для иерархического пользовательского типа сообщения

Ежегодный Архив с пользовательской даты 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) */ ?>