diff -r c7c34916027a -r 177826044cd9 wp/wp-admin/includes/class-wp-posts-list-table.php --- a/wp/wp-admin/includes/class-wp-posts-list-table.php Mon Oct 14 18:06:33 2019 +0200 +++ b/wp/wp-admin/includes/class-wp-posts-list-table.php Mon Oct 14 18:28:13 2019 +0200 @@ -74,31 +74,43 @@ public function __construct( $args = array() ) { global $post_type_object, $wpdb; - parent::__construct( array( - 'plural' => 'posts', - 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, - ) ); + parent::__construct( + array( + 'plural' => 'posts', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) + ); $post_type = $this->screen->post_type; $post_type_object = get_post_type_object( $post_type ); - $exclude_states = get_post_stati( array( - 'show_in_admin_all_list' => false, - ) ); - $this->user_posts_count = intval( $wpdb->get_var( $wpdb->prepare( " + $exclude_states = get_post_stati( + array( + 'show_in_admin_all_list' => false, + ) + ); + $this->user_posts_count = intval( + $wpdb->get_var( + $wpdb->prepare( + " SELECT COUNT( 1 ) FROM $wpdb->posts WHERE post_type = %s AND post_status NOT IN ( '" . implode( "','", $exclude_states ) . "' ) AND post_author = %d - ", $post_type, get_current_user_id() ) ) ); + ", + $post_type, + get_current_user_id() + ) + ) + ); if ( $this->user_posts_count && ! current_user_can( $post_type_object->cap->edit_others_posts ) && empty( $_REQUEST['post_status'] ) && empty( $_REQUEST['all_posts'] ) && empty( $_REQUEST['author'] ) && empty( $_REQUEST['show_sticky'] ) ) { $_GET['author'] = get_current_user_id(); } if ( 'post' === $post_type && $sticky_posts = get_option( 'sticky_posts' ) ) { - $sticky_posts = implode( ', ', array_map( 'absint', (array) $sticky_posts ) ); + $sticky_posts = implode( ', ', array_map( 'absint', (array) $sticky_posts ) ); $this->sticky_posts_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( 1 ) FROM $wpdb->posts WHERE post_type = %s AND post_status NOT IN ('trash', 'auto-draft') AND ID IN ($sticky_posts)", $post_type ) ); } } @@ -115,7 +127,6 @@ } /** - * * @return bool */ public function ajax_user_can() { @@ -123,7 +134,6 @@ } /** - * * @global array $avail_post_stati * @global WP_Query $wp_query * @global int $per_page @@ -138,10 +148,10 @@ $this->set_hierarchical_display( is_post_type_hierarchical( $this->screen->post_type ) && 'menu_order title' === $wp_query->query['orderby'] ); $post_type = $this->screen->post_type; - $per_page = $this->get_items_per_page( 'edit_' . $post_type . '_per_page' ); + $per_page = $this->get_items_per_page( 'edit_' . $post_type . '_per_page' ); /** This filter is documented in wp-admin/includes/post.php */ - $per_page = apply_filters( 'edit_posts_per_page', $per_page, $post_type ); + $per_page = apply_filters( 'edit_posts_per_page', $per_page, $post_type ); if ( $this->hierarchical_display ) { $total_items = $wp_query->post_count; @@ -150,7 +160,7 @@ } else { $post_counts = (array) wp_count_posts( $post_type, 'readable' ); - if ( isset( $_REQUEST['post_status'] ) && in_array( $_REQUEST['post_status'] , $avail_post_stati ) ) { + if ( isset( $_REQUEST['post_status'] ) && in_array( $_REQUEST['post_status'], $avail_post_stati ) ) { $total_items = $post_counts[ $_REQUEST['post_status'] ]; } elseif ( isset( $_REQUEST['show_sticky'] ) && $_REQUEST['show_sticky'] ) { $total_items = $this->sticky_posts_count; @@ -175,14 +185,15 @@ $this->is_trash = isset( $_REQUEST['post_status'] ) && $_REQUEST['post_status'] === 'trash'; - $this->set_pagination_args( array( - 'total_items' => $total_items, - 'per_page' => $per_page - ) ); + $this->set_pagination_args( + array( + 'total_items' => $total_items, + 'per_page' => $per_page, + ) + ); } /** - * * @return bool */ public function has_items() { @@ -192,10 +203,11 @@ /** */ public function no_items() { - if ( isset( $_REQUEST['post_status'] ) && 'trash' === $_REQUEST['post_status'] ) + if ( isset( $_REQUEST['post_status'] ) && 'trash' === $_REQUEST['post_status'] ) { echo get_post_type_object( $this->screen->post_type )->labels->not_found_in_trash; - else + } else { echo get_post_type_object( $this->screen->post_type )->labels->not_found; + } } /** @@ -223,9 +235,9 @@ * * @since 4.4.0 * - * @param array $args URL parameters for the link. - * @param string $label Link text. - * @param string $class Optional. Class attribute. Default empty string. + * @param string[] $args Associative array of URL parameters for the link. + * @param string $label Link text. + * @param string $class Optional. Class attribute. Default empty string. * @return string The formatted link string. */ protected function get_edit_link( $args, $label, $class = '' ) { @@ -233,7 +245,7 @@ $class_html = $aria_current = ''; if ( ! empty( $class ) ) { - $class_html = sprintf( + $class_html = sprintf( ' class="%s"', esc_attr( $class ) ); @@ -253,7 +265,6 @@ } /** - * * @global array $locked_post_status This seems to be deprecated. * @global array $avail_post_stati * @return array @@ -263,17 +274,18 @@ $post_type = $this->screen->post_type; - if ( !empty($locked_post_status) ) + if ( ! empty( $locked_post_status ) ) { return array(); + } $status_links = array(); - $num_posts = wp_count_posts( $post_type, 'readable' ); - $total_posts = array_sum( (array) $num_posts ); - $class = ''; + $num_posts = wp_count_posts( $post_type, 'readable' ); + $total_posts = array_sum( (array) $num_posts ); + $class = ''; $current_user_id = get_current_user_id(); - $all_args = array( 'post_type' => $post_type ); - $mine = ''; + $all_args = array( 'post_type' => $post_type ); + $mine = ''; // Subtract post types that are not included in the admin all list. foreach ( get_post_stati( array( 'show_in_admin_all_list' => false ) ) as $state ) { @@ -287,7 +299,7 @@ $mine_args = array( 'post_type' => $post_type, - 'author' => $current_user_id + 'author' => $current_user_id, ); $mine_inner_html = sprintf( @@ -303,7 +315,7 @@ $mine = $this->get_edit_link( $mine_args, $mine_inner_html, $class ); $all_args['all_posts'] = 1; - $class = ''; + $class = ''; } if ( empty( $class ) && ( $this->is_base_request() || isset( $_REQUEST['all_posts'] ) ) ) { @@ -325,7 +337,7 @@ $status_links['mine'] = $mine; } - foreach ( get_post_stati(array('show_in_admin_status_list' => true), 'objects') as $status ) { + foreach ( get_post_stati( array( 'show_in_admin_status_list' => true ), 'objects' ) as $status ) { $class = ''; $status_name = $status->name; @@ -334,13 +346,13 @@ continue; } - if ( isset($_REQUEST['post_status']) && $status_name === $_REQUEST['post_status'] ) { + if ( isset( $_REQUEST['post_status'] ) && $status_name === $_REQUEST['post_status'] ) { $class = 'current'; } $status_args = array( 'post_status' => $status_name, - 'post_type' => $post_type, + 'post_type' => $post_type, ); $status_label = sprintf( @@ -355,8 +367,8 @@ $class = ! empty( $_REQUEST['show_sticky'] ) ? 'current' : ''; $sticky_args = array( - 'post_type' => $post_type, - 'show_sticky' => 1 + 'post_type' => $post_type, + 'show_sticky' => 1, ); $sticky_inner_html = sprintf( @@ -370,11 +382,11 @@ ); $sticky_link = array( - 'sticky' => $this->get_edit_link( $sticky_args, $sticky_inner_html, $class ) + 'sticky' => $this->get_edit_link( $sticky_args, $sticky_inner_html, $class ), ); // Sticky comes after Publish, or if not listed, after All. - $split = 1 + array_search( ( isset( $status_links['publish'] ) ? 'publish' : 'all' ), array_keys( $status_links ) ); + $split = 1 + array_search( ( isset( $status_links['publish'] ) ? 'publish' : 'all' ), array_keys( $status_links ) ); $status_links = array_merge( array_slice( $status_links, 0, $split ), $sticky_link, array_slice( $status_links, $split ) ); } @@ -382,11 +394,10 @@ } /** - * * @return array */ protected function get_bulk_actions() { - $actions = array(); + $actions = array(); $post_type_obj = get_post_type_object( $this->screen->post_type ); if ( current_user_can( $post_type_obj->cap->edit_posts ) ) { @@ -435,11 +446,11 @@ if ( is_object_in_taxonomy( $post_type, 'category' ) ) { $dropdown_options = array( 'show_option_all' => get_taxonomy( 'category' )->labels->all_items, - 'hide_empty' => 0, - 'hierarchical' => 1, - 'show_count' => 0, - 'orderby' => 'name', - 'selected' => $cat + 'hide_empty' => 0, + 'hierarchical' => 1, + 'show_count' => 0, + 'orderby' => 'name', + 'selected' => $cat, ); echo ''; @@ -448,17 +459,78 @@ } /** + * Displays a formats drop-down for filtering items. + * + * @since 5.2.0 + * @access protected + * + * @param string $post_type Post type key. + */ + protected function formats_dropdown( $post_type ) { + /** + * Filters whether to remove the 'Formats' drop-down from the post list table. + * + * @since 5.2.0 + * + * @param bool $disable Whether to disable the drop-down. Default false. + */ + if ( apply_filters( 'disable_formats_dropdown', false ) ) { + return; + } + + // Make sure the dropdown shows only formats with a post count greater than 0. + $used_post_formats = get_terms( + array( + 'taxonomy' => 'post_format', + 'hide_empty' => true, + ) + ); + + /* + * Return if the post type doesn't have post formats, or there are no posts using formats, + * or if we're in the trash. + */ + if ( ! is_object_in_taxonomy( $post_type, 'post_format' ) || ! $used_post_formats || $this->is_trash ) { + return; + } + + $displayed_post_format = isset( $_GET['post_format'] ) ? $_GET['post_format'] : ''; + ?> + + + + ?>