diff --git a/eth-timeline.php b/eth-timeline.php index d12cb0d28b823eb160190be6f9c3b2db4c63d9ad..cc55531d41982b8bf508a912c83da4482975e140 100644 --- a/eth-timeline.php +++ b/eth-timeline.php @@ -65,6 +65,9 @@ class ETH_Timeline { add_action( 'add_meta_boxes_' . $this->post_type, array( $this, 'action_add_meta_boxes' ) ); add_action( 'save_post', array( $this, 'action_save_post' ) ); + add_filter( 'manage_' . $this->post_type . '_posts_columns', array( $this, 'filter_list_table_columns' ) ); + add_action( 'manage_' . $this->post_type . '_posts_custom_column', array( $this, 'do_list_table_columns' ), 10, 2 ); + add_filter( 'enter_title_here', array( $this, 'filter_editor_title_prompt' ), 10, 2 ); } @@ -134,7 +137,15 @@ class ETH_Timeline { } /** + * Enqueue admin assets * + * @uses get_current_screen + * @uses is_wp_error + * @uses wp_enqueue_script + * @uses plugins_url + * @uses wp_enqueue_style + * @action admin_enqueue_scripts + * @return null */ public function action_admin_enqueue_scripts() { $screen = get_current_screen(); @@ -147,14 +158,27 @@ class ETH_Timeline { } /** + * Register custom date metabox * + * @uses add_meta_box + * @action add_meta_boxes + * @return null */ public function action_add_meta_boxes() { add_meta_box( 'eth-timeline-dates', __( 'Dates', 'eth-timeline' ), array( $this, 'meta_box_dates' ), $this->post_type, 'normal', 'high' ); } /** + * Render dates metabox * + * @param object $post + * @uses get_post_meta + * @uses _e + * @uses wp_nonce_field + * @uses ths::get_field_name + * @uses this::get_nonce_name + * @action add_meta_boxes_{$this->post_type} + * @return string */ public function meta_box_dates( $post ) { $start = get_post_meta( $post->ID, $this->meta_start, true ); @@ -179,7 +203,16 @@ class ETH_Timeline { } /** + * Save custom dates * + * @param int $post_id + * @uses get_post_type + * @uses this::get_nonce_name + * @uses this::get_field_name + * @uses update_post_meta + * @uses delete_post_meta + * @action save_post + * @return null */ public function action_save_post( $post_id ) { if ( $this->post_type != get_post_type( $post_id ) ) @@ -188,7 +221,13 @@ class ETH_Timeline { if ( isset( $_POST[ $this->get_nonce_name( 'date' ) ] ) && wp_verify_nonce( $_POST[ $this->get_nonce_name( 'date' ) ], $this->get_field_name( 'date' ) ) ) { $dates = isset( $_POST['eth-timeline'] ) ? $_POST['eth-timeline'] : array(); + if ( empty( $dates ) ) + return; + foreach ( $dates as $key => $date ) { + if ( ! in_array( $key, array( 'start', 'end' ) ) ) + continue; + // Timestamp comes from JS if ( empty( $date ) ) $timestamp = false; @@ -203,6 +242,47 @@ class ETH_Timeline { } } + /** + * Add new date columns to list table + * + * @param array $columns + * @uses __ + * @filter manage_{$this->post_type}_posts_columns + * @return array + */ + public function filter_list_table_columns( $columns ) { + $after = array_splice( $columns, 2 ); + + $new_columns = array( + 'eth_timeline_start' => __( 'Start Date', 'eth-timeline' ), + 'eth_timeline_end' => __( 'End Date (Optional)', 'eth-timeline' ), + ); + + $columns = $columns + $new_columns + $after; + + return $columns; + } + + /** + * Display start and end dates in the post list table + * + * @param string $column + * @param int $post_id + * @uses get_post_meta + * @uses get_option + * @action manage_{$this->post_type}_posts_custom_column + * @return string or null + */ + public function do_list_table_columns( $column, $post_id ) { + if ( in_array( $column, array( 'eth_timeline_start', 'eth_timeline_end' ) ) ) { + $key = str_replace( 'eth_timeline_', '', $column ); + $date = get_post_meta( $post_id, $this->{'meta_' . $key}, true ); + + if ( is_numeric( $date ) ) + echo date( get_option( 'date_format', 'F j, Y' ), $date ); + } + } + /** * Provide better prompt text for the editor title field *