来自自定义日期元数据的年度存档(事件开始日期)

时间:2013-11-16 作者:efoula

我创建了一个名为(event)的自定义post\\u类型,下面是代码

            // 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 );
然后,我为这个事件post\\u类型创建了一个自定义日期meta\\u框,下面是代码

                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 p.m.)\',
                            \'id\' => $prefix . \'event_time\',
                            \'type\' => \'text\',
                            \'save\' => true
                        )
                    )
                );  
                return $meta_boxes;
            }
我的问题是:

如何为自定义post\\u类型(event)构建自定义归档页面,该页面将按自定义元框(event\\u starttextdate)对事件进行排序???

示例:

2013

<事件1

2012

<事件3

2011

<非常感谢您的帮助。

1 个回复
SO网友:efoula

I just coded a workaround solution for this issue, if anyone is interested here is my solution:

<此解决方案使用Bootstrap Navs Option , 因此,您首先需要下载引导程序并将其链接到头文件或索引文件中。

请仔细阅读下面代码中的注释,以了解发生了什么

The Solution (Code):

                <?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) */

            ?>

结束

相关推荐

Metabox Input Not saving

我已经有很长一段时间没有做过任何元框了,所以我很快就为我正在开发的网站做了这个元框。我的问题是,当我在框中输入一些文本并点击“保存”时,文本会消失,所以我只剩下空文本框,没有保存的数据。我猜这和我的save_post 作用更新*现在标题字段可以工作,但内容字段不能工作。//intialising the metabox and using the callback function add_action( \'add_meta_boxes\', \'owl_mb_cr