Skip to content

Instantly share code, notes, and snippets.

@EvanHerman
Last active February 9, 2018 16:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save EvanHerman/a64bc7300c90bf4dda126a18614246b3 to your computer and use it in GitHub Desktop.
Save EvanHerman/a64bc7300c90bf4dda126a18614246b3 to your computer and use it in GitHub Desktop.
Timeline Express - Enable Announcement Date & Time Pickers
<?php
/**
* Add date/time picker field to Timeline Express announcements
*
* @param array $custom_field Array of custom fields to append to our announcements.
*/
function add_custom_fields_to_announcements( $custom_fields ) {
$custom_fields[] = array(
'name' => esc_html__( 'Announcement Date & Time', 'text-domain' ),
'desc' => esc_html__( 'Select the time that this announcement occured or will occur on.', 'text-domain' ),
'id' => 'announcement-time',
'type' => 'text_datetime_timestamp',
);
$full_date = get_option( 'date_format' ) . ' ' . get_option( 'time_format' );
$time_format = get_option( 'time_format' );
// wp_die( print_r( $custom_fields ) );
$custom_fields[] = array(
'name' => esc_html__( 'Announcement Date Type', 'text-domain' ),
'desc' => esc_html__( 'Customize the date format for this announcement.', 'text-domain' ),
'id' => 'announcement-date-format',
'type' => 'radio',
'default' => $full_date,
'options' => [
$full_date => 'Full Date',
'Y' => 'Year Only',
$time_format => 'Time Only',
],
);
return $custom_fields;
}
add_filter( 'timeline_express_custom_fields', 'add_custom_fields_to_announcements' );
/**
* Hide the original "Announcement Date" field/row.
*
* @return mixed Style tag to hide the original date picker
*/
function hide_default_announcement_date_picker() {
$screen = get_current_screen();
if ( isset( $screen->base ) && 'te_announcements' === $screen->id ) {
?><style>.cmb2-id-announcement-date { display: none; }</style><?php
}
}
add_action( 'admin_head', 'hide_default_announcement_date_picker' );
/**
* Append new announcement time and date on the frontend
*
* @return string New string to append to our announcement date.
*/
function display_announcement_date( $date ) {
global $post;
$announcement_date = get_post_meta( $post->ID, 'announcement-time', true );
$date_format = get_post_meta( $post->ID, 'announcement-date-format', true );
$format = $date_format ? $date_format : get_option( 'date_format' ) . ' ' . get_option( 'time_format' );
return date_i18n( $format, $announcement_date );
}
add_filter( 'timeline_express_frontend_date_filter', 'display_announcement_date' );
/**
* Filter the Timeline Express query 'orderby' param & add a date fallback
*
* Timeline Express sorts by the announcement date by default.
* Use this function to fallback to the published date when two
* or more announcements are using the same announcement date.
* This allows for manual control over the order of announcements.
*
* Source Code: https://github.com/EvanHerman/timeline-express/blob/master/lib/classes/class.timeline-express-initialize.php#L86
*/
function timeline_express_sort_by_published_date_fallback( $args, $post, $atts ) {
$args['meta_key'] = 'announcement-time';
// Order by announcement-time. If time & date matches, fallback to post published date.
$args['orderby'] = [
'meta_value_num' => $args['order'],
'date' => $args['order'],
];
return $args;
}
add_filter( 'timeline_express_announcement_query_args', 'timeline_express_sort_by_published_date_fallback', 10, 3 );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment