Only 1 custom post type date displaying
-
Hi, first thanks for the plugin – I use it all the time and its great.
I have a problem trying to insert a date custom field column. The date displays perfectly for the first (oldest) post, but all the other posts do not display anything at all. Any ideas why that might be? The problem only happens when using dates – all other custom fields work fine.
-
It is most likely that no date is displayed because the dates could not be parsed properly. How are the dates stored in the database (in what format)? What happens if you change the “Field Type” in Admin Columns to “Default”?
To allow us to get a good impression of the problem: could you create two columns, both for the date field, setting the “Field Type” for the first to “Date”, and to “Default” for the second? If you could do that and post a screenshot of the posts management page after that, that would be great.
Here’s the screenshot. First post is working, then nothing.
Code I’m using in functions.php to gather & store the dates is below:
function ep_eventposts_metaboxes() { add_meta_box( 'ept_event_date_start', 'Start Date and Time', 'ept_event_date', 'auction', 'side', 'default', array( 'id' => '_start') ); add_meta_box( 'ept_event_date_end', 'End Date and Time', 'ept_event_date', 'auction', 'side', 'default', array('id' =>'_end') ); } add_action( 'admin_init', 'ep_eventposts_metaboxes' ); // Metabox HTML function ept_event_date($post, $args) { $metabox_id = $args['args']['id']; global $post, $wp_locale; // Use nonce for verification wp_nonce_field( plugin_basename( __FILE__ ), 'ep_eventposts_nonce' ); $time_adj = current_time( 'timestamp' ); $month = get_post_meta( $post->ID, $metabox_id . '_month', true ); if ( empty( $month ) ) { $month = gmdate( 'm', $time_adj ); } $day = get_post_meta( $post->ID, $metabox_id . '_day', true ); if ( empty( $day ) ) { $day = gmdate( 'd', $time_adj ); } $year = get_post_meta( $post->ID, $metabox_id . '_year', true ); if ( empty( $year ) ) { $year = gmdate( 'Y', $time_adj ); } $hour = get_post_meta($post->ID, $metabox_id . '_hour', true); if ( empty($hour) ) { $hour = '10'; } $min = get_post_meta($post->ID, $metabox_id . '_minute', true); if ( empty($min) ) { $min = '30'; } $month_s = '<select name="' . $metabox_id . '_month">'; for ( $i = 1; $i < 13; $i = $i +1 ) { $month_s .= "\t\t\t" . '<option value="' . zeroise( $i, 2 ) . '"'; if ( $i == $month ) $month_s .= ' selected="selected"'; $month_s .= '>' . $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) ) . "</option>\n"; } $month_s .= '</select>'; echo '<input type="text" name="' . $metabox_id . '_day" value="' . $day . '" size="2" maxlength="2" />'; echo $month_s; echo '<input type="text" name="' . $metabox_id . '_year" value="' . $year . '" size="4" maxlength="4" /> @ '; echo '<input type="text" name="' . $metabox_id . '_hour" value="' . $hour . '" size="2" maxlength="2"/>:'; echo '<input type="text" name="' . $metabox_id . '_minute" value="' . $min . '" size="2" maxlength="2" />'; } // Save the Metabox Data function ep_eventposts_save_meta( $post_id, $post ) { if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; if ( !isset( $_POST['ep_eventposts_nonce'] ) ) return; if ( !wp_verify_nonce( $_POST['ep_eventposts_nonce'], plugin_basename( __FILE__ ) ) ) return; // Is the user allowed to edit the post or page? if ( !current_user_can( 'edit_post', $post->ID ) ) return; // OK, we're authenticated: we need to find and save the data // We'll put it into an array to make it easier to loop though $metabox_ids = array( '_start', '_end' ); foreach ($metabox_ids as $key ) { $events_meta[$key . '_month'] = $_POST[$key . '_month']; $events_meta[$key . '_day'] = $_POST[$key . '_day']; if($_POST[$key . '_hour']<10){ $events_meta[$key . '_hour'] = '0'.$_POST[$key . '_hour']; } else { $events_meta[$key . '_hour'] = $_POST[$key . '_hour']; } $events_meta[$key . '_year'] = $_POST[$key . '_year']; $events_meta[$key . '_hour'] = $_POST[$key . '_hour']; $events_meta[$key . '_minute'] = $_POST[$key . '_minute']; $events_meta[$key . '_eventtimestamp'] = $events_meta[$key . '_year'] . $events_meta[$key . '_month'] . $events_meta[$key . '_day'] . $events_meta[$key . '_hour'] . $events_meta[$key . '_minute']; } // Add values of $events_meta as custom fields foreach ( $events_meta as $key => $value ) { // Cycle through the $events_meta array! if ( $post->post_type == 'revision' ) return; // Don't store custom data twice $value = implode( ',', (array)$value ); // If $value is an array, make it a CSV (unlikely) if ( get_post_meta( $post->ID, $key, FALSE ) ) { // If the custom field already has a value update_post_meta( $post->ID, $key, $value ); } else { // If the custom field doesn't have a value add_post_meta( $post->ID, $key, $value ); } if ( !$value ) delete_post_meta( $post->ID, $key ); // Delete if blank } } add_action( 'save_post', 'ep_eventposts_save_meta', 1, 2 ); /** * Helpers to display the date on the front end */ // Get the Month Abbreviation function eventposttype_get_the_month_abbr($month) { global $wp_locale; for ( $i = 1; $i < 13; $i = $i +1 ) { if ( $i == $month ) $monthabbr = $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) ); } return $monthabbr; } // Display the date function eventposttype_get_the_event_date() { global $post; $eventdate = ''; $month = get_post_meta($post->ID, '_month', true); $eventdate = eventposttype_get_the_month_abbr($month); $eventdate .= ' ' . get_post_meta($post->ID, '_day', true) . ','; $eventdate .= ' ' . get_post_meta($post->ID, '_year', true); $eventdate .= ' at ' . get_post_meta($post->ID, '_hour', true); $eventdate .= ':' . get_post_meta($post->ID, '_minute', true); echo $eventdate; }
Thanks for your help.
Thanks for all the information! It seems that you have not set an event date for the top 3 posts in your image (image). I’m assuming you’re using
_start_eventtimestamp
or_end_timestamp
as the custom field key to be displayed. Could you post the value of meta_value in the wp_postmeta-table in the database for these 3 posts that do not display a date?Hi Jesper. Thanks for your help with this. Turns out the code I was using for the date meta-boxes was causing other problems with the site too, so I’ve started using Advanced Custom Fields instead for that – which is a lot simpler and works great with your plugin, the date admin column now works. Thanks for your time, appreciate it.
Im having sort of the same issue. The publish date is not displaying on the admin edit page. Ive made a custom field type for date and a second one with default like you suggested but theres still no publish date on either. the default does show Fj,Yg:i a
I need these date to display so that my rss feed will identify my post.
any idea?
- The topic ‘Only 1 custom post type date displaying’ is closed to new replies.