Last active
February 9, 2018 16:36
-
-
Save EvanHerman/a64bc7300c90bf4dda126a18614246b3 to your computer and use it in GitHub Desktop.
Timeline Express - Enable Announcement Date & Time Pickers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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