Advertisement
johnbentwin

Custom Post

Dec 13th, 2011
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 16.45 KB | None | 0 0
  1.       <?php
  2.       ////////////////////////////// Begin 'event' Custom Post Type ///////////////////////////////////
  3.      
  4.       function benchmark() {
  5.               static $start = NULL;
  6.               if( is_null($start) ) {
  7.                   $start = get_microtime();
  8.               } else {
  9.                   $benchmark = get_microtime() - $start;
  10.                   $start = get_microtime();
  11.                   return $benchmark;
  12.               }
  13.           }
  14.        
  15.           function get_microtime() {
  16.               list($usec, $sec) = explode(" ", microtime());
  17.               return ((float)$usec + (float)$sec);
  18.           }
  19.       /////////////////  end Bench Marks
  20.          
  21.       add_action( 'init', 'register_cpt_event' );
  22.           function register_cpt_event() {
  23.       $labels = array(
  24.           'name' => _x( 'Events', 'event' ),
  25.           'singular_name' => _x( 'Event', 'event' ),
  26.           'add_new' => _x( 'Add New Event', 'event' ),
  27.           'add_new_item' => _x( 'Add New Event', 'event' ),
  28.           'edit_item' => _x( 'Edit Event', 'event' ),
  29.           'new_item' => _x( 'New Event', 'event' ),
  30.           'view_item' => _x( 'View Event', 'event' ),
  31.           'search_items' => _x( 'Search Events', 'event' ),
  32.           'not_found' => _x( 'No events found', 'event' ),
  33.           'not_found_in_trash' => _x( 'No events found in Trash', 'event' ),
  34.           'parent_item_colon' => _x( 'Parent Event:', 'event' ),
  35.           'menu_name' => _x( 'Events', 'event' ),
  36.           );
  37.          
  38.       $args = array(
  39.           'labels' => $labels,
  40.           'hierarchical' => true,
  41.           'description' => 'Events at regional arts venues in the Ohio area.',
  42.           'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'trackbacks', 'custom-fields' ),
  43.           'taxonomies' => array( 'locations' ),
  44.           'public' => true,
  45.           'show_ui' => true,
  46.           'show_in_menu' => true,
  47.           'show_in_nav_menus' => true,
  48.           'publicly_queryable' => true,
  49.           'exclude_from_search' => false,
  50.           'query_var' => true,
  51.           'can_export' => true,
  52.           'rewrite' => array('slug'=>'','with_front'=>false),
  53.           'has_archive' => 'events',
  54.           'capability_type' => 'post'
  55.           );
  56.          
  57.       register_post_type( 'event', $args );
  58.           }
  59.          
  60.       add_action( 'init', 'create_locations' );
  61.           function create_locations() {
  62.       $labels = array(
  63.           'name' => _x( 'Locations', 'taxonomy general name' ),
  64.           'singular_name' => _x( 'Location', 'taxonomy singular name' ),
  65.           'search_items' =>  __( 'Search Locations' ),
  66.           'all_items' => __( 'All Locations' ),
  67.           'parent_item' => __( 'Parent Location' ),
  68.           'parent_item_colon' => __( 'Parent Location:' ),
  69.           'edit_item' => __( 'Edit Location' ),
  70.           'update_item' => __( 'Update Location' ),
  71.           'add_new_item' => __( 'Add New Location' ),
  72.           'new_item_name' => __( 'New Location Name' ),
  73.         );  
  74.      
  75.       register_taxonomy('location','event',array(
  76.           'hierarchical' => true,
  77.           'labels' => $labels
  78.         ));
  79.           }
  80.      
  81.       // Custom Meta Data for Events
  82.            $meta_box['event'] = array(
  83.               'id' => 'event-meta-details',
  84.               'title' => 'Event Information',
  85.               'context' => 'normal',
  86.               'priority' => 'high',
  87.               'fields' => array(
  88.                   array(
  89.                       'name' => 'Start Date',
  90.                       'desc' => '(Enter yyyy/mm/dd)',
  91.                       'id' => 'start_date',
  92.                       'type' => 'text',
  93.                       'default' => ''
  94.                   ),
  95.                   array(
  96.                       'name' => 'End Date',
  97.                       'desc' => '(Enter yyyy/mm/dd)',
  98.                       'id' => 'end_date',
  99.                       'type' => 'text',
  100.                       'default' => ''
  101.                   ),
  102.                   array(
  103.                       'name' => 'Opening',
  104.                       'desc' => 'YYYY-MM-DD 00:00 24 hour clock',
  105.                       'id' => 'opening_time',
  106.                       'type' => 'text',
  107.                       'default' => ''
  108.                   ),
  109.                      array(
  110.                       'name' => 'Closing',
  111.                       'desc' => 'YYYY-MM-DD 00:00 24 hour clock',
  112.                       'id' => 'closing_time',
  113.                       'type' => 'text',
  114.                       'default' => ''
  115.                   ),
  116.                   array(
  117.                       'name' => 'Artist Talk',
  118.                       'desc' => 'YYYY-MM-DD 00:00 24 hour clock',
  119.                       'id' => 'artist_talk_time',
  120.                       'type' => 'text',
  121.                       'default' => ''
  122.                   ),
  123.                       array(
  124.                       'name' => 'Lecture',
  125.                       'desc' => 'YYYY-MM-DD 00:00 24 hour clock',
  126.                       'id' => 'lecture_time',
  127.                       'type' => 'text',
  128.                       'default' => ''
  129.                   ),
  130.                           array(
  131.                       'name' => 'Panel',
  132.                       'desc' => 'YYYY-MM-DD 00:00 24 hour clock',
  133.                       'id' => 'panel_time',
  134.                       'type' => 'text',
  135.                       'default' => ''
  136.                   ),
  137.                           array(
  138.                       'name' => 'Special Event',
  139.                       'desc' => 'YYYY-MM-DD 00:00 24 hour clock',
  140.                       'id' => 'special_event_time',
  141.                       'type' => 'text',
  142.                       'default' => ''
  143.                   ),
  144.                           array(
  145.                       'name' => 'Workshop',
  146.                       'desc' => 'YYYY-MM-DD 00:00 24 hour clock',
  147.                       'id' => 'workshop_time',
  148.                       'type' => 'text',
  149.                       'default' => ''
  150.                   ),
  151.                   array(
  152.                   'name' => 'Venue',
  153.                   'desc' => 'Venue of Event',
  154.                   'id' => $prefix . 'event_venue',
  155.                   'type' => 'radio',
  156.                   'options' => array(  
  157.                   array('name' => 'Pine Gallery', 'value' => 'Pine Gallery'),  
  158.                   array('name' => 'Spruce Gallery', 'value' => 'Spruce  Gallery'),
  159.                   array('name' => 'Oak Gallery', 'value' => 'Oak Gallery')
  160.                   )
  161.               ),
  162.                   array(
  163.                       'name' => 'Custom Venue',
  164.                       'desc' => 'Enter Venue Name if Enter Text Below is Checked',
  165.                       'id' => 'custom_event_venue',
  166.                       'type' => 'text',
  167.                       'default' => ''
  168.                   ),
  169.                   array(
  170.                           'name' => 'Featured / Reccomended',
  171.                       'desc' => 'Recommended Event',
  172.                       'id' => 'featured_event',
  173.                       'type' => 'checkbox',
  174.                       'default' => ''
  175.                     )
  176.                    
  177.               )
  178.           );
  179.      
  180.       ///////////////
  181.        function get_related_event_data( $venue, $field = 'all' ) {
  182.           $event_data = array(
  183.               'Pine Gallery' => array(
  184.                   'address' => 'Test Address 2',
  185.                   'phone_no' => '444-333-3333',
  186.                   'url' => 'http://www.url2.com'
  187.               ),
  188.               'Spruce Gallery' => array(
  189.                   'address' => 'Test Address 2',
  190.                   'phone_no' => '444-333-3333',
  191.                   'url' => 'http://www.url2.com'
  192.               ),
  193.               'Oak Gallery' => array(
  194.                   'address' => 'Test Address 3',
  195.                   'phone_no' => '555-666-6666',
  196.                   'url' => 'http://www.url3.com'
  197.               ),
  198.           );
  199.           if( !isset( $event_data[$venue] ) )
  200.               return;
  201.      
  202.           // Optionally return all fields(note: you can't echo arrays, so be sure to loop over the data if pulling all fields
  203.           if( 'all' == $field )
  204.               return $event_data[$venue];
  205.      
  206.           if( !isset( $event_data[$venue][$field] ) )
  207.               return;
  208.      
  209.           return $event_data[$venue][$field];
  210.       }
  211.      
  212.       ///////////////
  213.      
  214.       // Add meta boxes to admin panel only needs to be added once
  215.       add_action('admin_menu', 'plib_add_box');
  216.      
  217.       //Add meta boxes to post types
  218.           function plib_add_box() {
  219.               global $meta_box;
  220.              
  221.               foreach($meta_box as $post_type => $value) {
  222.                   add_meta_box($value['id'], $value['title'], 'plib_format_box', $post_type, $value['context'], $value['priority']);
  223.               }
  224.           }
  225.          
  226.       //Format meta boxes
  227.           function plib_format_box() {
  228.             global $meta_box, $post;
  229.            
  230.       // Use once for verification
  231.       echo '<input type="hidden" name="plib_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />';
  232.            
  233.       echo '<table class="form-table">';
  234.            
  235.       foreach ($meta_box[$post->post_type]['fields'] as $field) {
  236.       // get current post meta data
  237.       $meta = get_post_meta($post->ID, $field['id'], true);
  238.            
  239.                 echo '<tr>'.
  240.                         '<th style="width:20%"><label for="'. $field['id'] .'">'. $field['name']. '</label></th>'.
  241.                         '<td>';
  242.                 switch ($field['type']) {
  243.                     case 'text':
  244.                         echo '<input type="text" name="'. $field['id']. '" id="'. $field['id'] .'" value="'. ($meta ? $meta : $field['default']) . '" size="30" style="width:30%" />'. ' - '. $field['desc'];
  245.                         break;
  246.                     case 'textarea':
  247.                         echo '<textarea name="'. $field['id']. '" id="'. $field['id']. '" cols="60" rows="4" style="width:97%">'. ($meta ? $meta : $field['default']) . '</textarea>'. '<br />'. $field['desc'];
  248.                         break;
  249.                     case 'select':
  250.                         echo '<select name="'. $field['id'] . '" id="'. $field['id'] . '">';
  251.                         foreach ($field['options'] as $option) {
  252.                             echo '<option '. ( $meta == $option ? ' selected="selected"' : '' ) . '>'. $option . '</option>';
  253.                         }
  254.                         echo '</select>';
  255.                         break;
  256.                     case 'radio':
  257.                         foreach ($field['options'] as $option) {
  258.                             echo '<input type="radio" name="' . $field['id'] . '" value="' . $option['value'] . '"' . ( $meta == $option['value'] ? ' checked="checked"' : '' ) . ' />' . $option['name'];
  259.                         }
  260.                         break;
  261.                     case 'checkbox':
  262.                         echo '<input type="checkbox" name="' . $field['id'] . '" id="' . $field['id'] . '"' . ( $meta ? ' checked="checked"' : '' ) . ' />';
  263.                         break;
  264.                 }
  265.                 echo     '<td>'.'</tr>';
  266.             }
  267.            
  268.             echo '</table>';
  269.            
  270.           }
  271.      
  272.       // Save data from meta box
  273.           function plib_save_data($post_id) {
  274.               global $meta_box,  $post;
  275.              
  276.               //Verify nonce
  277.               if (!wp_verify_nonce($_POST['plib_meta_box_nonce'], basename(__FILE__))) {
  278.                   return $post_id;
  279.               }
  280.            
  281.               //Check autosave
  282.               if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
  283.                   return $post_id;
  284.               }
  285.            
  286.               //Check permissions
  287.               if ('page' == $_POST['post_type']) {
  288.                   if (!current_user_can('edit_page', $post_id)) {
  289.                       return $post_id;
  290.                   }
  291.               } elseif (!current_user_can('edit_post', $post_id)) {
  292.                   return $post_id;
  293.               }
  294.              
  295.               foreach ($meta_box[$post->post_type]['fields'] as $field) {
  296.                   $old = get_post_meta($post_id, $field['id'], true);
  297.                   $new = $_POST[$field['id']];
  298.                  
  299.                   if ($new && $new != $old) {
  300.                       update_post_meta($post_id, $field['id'], $new);
  301.                   } elseif ('' == $new && $old) {
  302.                       delete_post_meta($post_id, $field['id'], $old);
  303.                   }
  304.               }
  305.           }
  306.            
  307.       add_action('save_post', 'plib_save_data');
  308.      
  309.       // Remove Meta entry Fields from Event Custom Posts
  310.      
  311.       add_action('admin_menu', 'dbt_remove_boxes');
  312.      
  313.       function dbt_remove_boxes(){
  314.           remove_meta_box('postexcerpt', 'event', 'normal');
  315.           //  remove_meta_box('postcustom', 'post', 'normal');
  316.           remove_meta_box('trackbacksdiv', 'event', 'normal');
  317.          //  remove_meta_box('slugdiv', 'post', 'normal');
  318.           remove_meta_box('authordiv', 'event', 'normal');
  319.          // remove_meta_box('commentstatusdiv', 'post', 'normal');
  320.       }
  321.      
  322.        /**
  323.        * Adds event post metaboxes for start time and end time
  324.        * http://codex.wordpress.org/Function_Reference/add_meta_box
  325.        *
  326.        * We want two time event metaboxes, one for the start time and one for the end time.
  327.        * Two avoid repeating code, we'll just pass the $identifier in a callback.
  328.        * If you wanted to add this to regular posts instead, just swap 'event' for 'post' in add_meta_box.
  329.        */
  330.        
  331.       function ep_eventposts_metaboxes() {
  332.           add_meta_box( 'ept_event_date_start', 'Start Date and Time', 'ept_event_date', 'event', 'side', 'default', array( 'id' => '_start') );
  333.           add_meta_box( 'ept_event_date_end', 'End Date and Time', 'ept_event_date', 'event', 'side', 'default', array('id'=>'_end') );
  334.           add_meta_box( 'ept_event_location', 'Event Location', 'ept_event_location', 'event', 'normal', 'default', array('id'=>'_end') );
  335.       }
  336.       add_action( 'admin_init', 'ep_eventposts_metaboxes' );
  337.        
  338.       // Metabox HTML
  339.        
  340.       function ept_event_date($post, $args) {
  341.           $metabox_id = $args['args']['id'];
  342.           global $post, $wp_locale;
  343.        
  344.           // Use nonce for verification
  345.           wp_nonce_field( plugin_basename( __FILE__ ), 'ep_eventposts_nonce' );
  346.        
  347.           $time_adj = current_time( 'timestamp' );
  348.           $month = get_post_meta( $post->ID, $metabox_id . '_month', true );
  349.        
  350.           if ( empty( $month ) ) {
  351.               $month = gmdate( 'm', $time_adj );
  352.           }
  353.        
  354.           $day = get_post_meta( $post->ID, $metabox_id . '_day', true );
  355.        
  356.           if ( empty( $day ) ) {
  357.               $day = gmdate( 'd', $time_adj );
  358.           }
  359.        
  360.           $year = get_post_meta( $post->ID, $metabox_id . '_year', true );
  361.        
  362.           if ( empty( $year ) ) {
  363.               $year = gmdate( 'Y', $time_adj );
  364.           }
  365.        
  366.           $hour = get_post_meta($post->ID, $metabox_id . '_hour', true);
  367.        
  368.           if ( empty($hour) ) {
  369.               $hour = gmdate( 'H', $time_adj );
  370.           }
  371.        
  372.           $min = get_post_meta($post->ID, $metabox_id . '_minute', true);
  373.        
  374.           if ( empty($min) ) {
  375.               $min = '00';
  376.           }
  377.        
  378.           $month_s = '<select name="' . $metabox_id . '_month">';
  379.           for ( $i = 1; $i < 13; $i = $i +1 ) {
  380.               $month_s .= "\t\t\t" . '<option value="' . zeroise( $i, 2 ) . '"';
  381.               if ( $i == $month )
  382.                   $month_s .= ' selected="selected"';
  383.               $month_s .= '>' . $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) ) . "</option>\n";
  384.           }
  385.           $month_s .= '</select>';
  386.        
  387.           echo $month_s;
  388.           echo '<input type="text" name="' . $metabox_id . '_day" value="' . $day  . '" size="2" maxlength="2" />';
  389.           echo '<input type="text" name="' . $metabox_id . '_year" value="' . $year . '" size="4" maxlength="4" /> @ ';
  390.           echo '<input type="text" name="' . $metabox_id . '_hour" value="' . $hour . '" size="2" maxlength="2"/>:';
  391.           echo '<input type="text" name="' . $metabox_id . '_minute" value="' . $min . '" size="2" maxlength="2" />';
  392.        
  393.       }
  394.        
  395.       function ept_event_location() {
  396.           global $post;
  397.           // Use nonce for verification
  398.           wp_nonce_field( plugin_basename( __FILE__ ), 'ep_eventposts_nonce' );
  399.           // The metabox HTML
  400.           $event_location = get_post_meta( $post->ID, '_event_location', true );
  401.           echo '<label for="_event_location">Location:</label>';
  402.           echo '<input type="text" name="_event_location" value="' . $event_location  . '" />';
  403.       }
  404.        
  405.       // Save the Metabox Data
  406.        
  407.       function ep_eventposts_save_meta( $post_id, $post ) {
  408.        
  409.           if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
  410.               return;
  411.        
  412.           if ( !isset( $_POST['ep_eventposts_nonce'] ) )
  413.               return;
  414.        
  415.           if ( !wp_verify_nonce( $_POST['ep_eventposts_nonce'], plugin_basename( __FILE__ ) ) )
  416.               return;
  417.        
  418.           // Is the user allowed to edit the post or page?
  419.           if ( !current_user_can( 'edit_post', $post->ID ) )
  420.               return;
  421.        
  422.           // OK, we're authenticated: we need to find and save the data
  423.           // We'll put it into an array to make it easier to loop though
  424.        
  425.           $metabox_ids = array( '_start', '_end' );
  426.        
  427.           foreach ($metabox_ids as $key ) {
  428.               $events_meta[$key . '_month'] = $_POST[$key . '_month'];
  429.               $events_meta[$key . '_day'] = $_POST[$key . '_day'];
  430.                   if($_POST[$key . '_hour']<10){
  431.                        $events_meta[$key . '_hour'] = '0'.$_POST[$key . '_hour'];
  432.                    } else {
  433.                          $events_meta[$key . '_hour'] = $_POST[$key . '_hour'];
  434.                    }
  435.               $events_meta[$key . '_year'] = $_POST[$key . '_year'];
  436.               $events_meta[$key . '_hour'] = $_POST[$key . '_hour'];
  437.               $events_meta[$key . '_minute'] = $_POST[$key . '_minute'];
  438.               $events_meta[$key . '_eventtimestamp'] = $events_meta[$key . '_year'] . $events_meta[$key . '_month'] . $events_meta[$key . '_day'] . $events_meta[$key . '_hour'] . $events_meta[$key . '_minute'];
  439.           }
  440.        
  441.           // Add values of $events_meta as custom fields
  442.        
  443.           foreach ( $events_meta as $key => $value ) { // Cycle through the $events_meta array!
  444.               if ( $post->post_type == 'revision' ) return; // Don't store custom data twice
  445.               $value = implode( ',', (array)$value ); // If $value is an array, make it a CSV (unlikely)
  446.               if ( get_post_meta( $post->ID, $key, FALSE ) ) { // If the custom field already has a value
  447.                   update_post_meta( $post->ID, $key, $value );
  448.               } else { // If the custom field doesn't have a value
  449.                   add_post_meta( $post->ID, $key, $value );
  450.               }
  451.               if ( !$value ) delete_post_meta( $post->ID, $key ); // Delete if blank
  452.           }
  453.        
  454.       }
  455.        
  456.       add_action( 'save_post', 'ep_eventposts_save_meta', 1, 2 );
  457.        
  458.       /**
  459.        * Helpers to display the date on the front end
  460.        */
  461.        
  462.       // Get the Month Abbreviation
  463.        
  464.       function eventposttype_get_the_month_abbr($month) {
  465.           global $wp_locale;
  466.           for ( $i = 1; $i < 13; $i = $i +1 ) {
  467.                       if ( $i == $month )
  468.                           $monthabbr = $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) );
  469.                       }
  470.           return $monthabbr;
  471.       }
  472.        
  473.       // Display the date
  474.        
  475.       function eventposttype_get_the_event_date() {
  476.           global $post;
  477.           $eventdate = '';
  478.           $month = get_post_meta($post->ID, '_month', true);
  479.           $eventdate = eventposttype_get_the_month_abbr($month);
  480.           $eventdate .= ' ' . get_post_meta($post->ID, '_day', true) . ',';
  481.           $eventdate .= ' ' . get_post_meta($post->ID, '_year', true);
  482.           $eventdate .= ' at ' . get_post_meta($post->ID, '_hour', true);
  483.           $eventdate .= ':' . get_post_meta($post->ID, '_minute', true);
  484.           echo $eventdate;
  485.       }
  486.       ?>
  487.  
  488.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement