X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/11be15bd505d66a91e2c80062190b13e315a04a9..e3ff8f35458a959c1879c0a4976701ed8dcfe651:/wp-admin/includes/class-wp-media-list-table.php
diff --git a/wp-admin/includes/class-wp-media-list-table.php b/wp-admin/includes/class-wp-media-list-table.php
index 67fd187c..d0c24449 100644
--- a/wp-admin/includes/class-wp-media-list-table.php
+++ b/wp-admin/includes/class-wp-media-list-table.php
@@ -1,16 +1,51 @@
detached = isset( $_REQUEST['detached'] ) || isset( $_REQUEST['find_detached'] );
+ /**
+ * Holds the number of pending comments for each post.
+ *
+ * @since 4.4.0
+ * @var array
+ * @access protected
+ */
+ protected $comment_pending_count = array();
+
+ private $detached;
+
+ private $is_trash;
+
+ /**
+ * Constructor.
+ *
+ * @since 3.1.0
+ * @access public
+ *
+ * @see WP_List_Table::__construct() for more information on default arguments.
+ *
+ * @param array $args An associative array of arguments.
+ */
+ public function __construct( $args = array() ) {
+ $this->detached = ( isset( $_REQUEST['attachment-filter'] ) && 'detached' === $_REQUEST['attachment-filter'] );
+
+ $this->modes = array(
+ 'list' => __( 'List View' ),
+ 'grid' => __( 'Grid View' )
+ );
parent::__construct( array(
'plural' => 'media',
@@ -18,21 +53,29 @@ class WP_Media_List_Table extends WP_List_Table {
) );
}
- function ajax_user_can() {
+ /**
+ *
+ * @return bool
+ */
+ public function ajax_user_can() {
return current_user_can('upload_files');
}
- function prepare_items() {
- global $lost, $wpdb, $wp_query, $post_mime_types, $avail_post_mime_types;
+ /**
+ *
+ * @global WP_Query $wp_query
+ * @global array $post_mime_types
+ * @global array $avail_post_mime_types
+ * @global string $mode
+ */
+ public function prepare_items() {
+ global $wp_query, $post_mime_types, $avail_post_mime_types, $mode;
- $q = $_REQUEST;
+ list( $post_mime_types, $avail_post_mime_types ) = wp_edit_attachments_query( $_REQUEST );
- if ( !empty( $lost ) )
- $q['post__in'] = implode( ',', $lost );
+ $this->is_trash = isset( $_REQUEST['attachment-filter'] ) && 'trash' === $_REQUEST['attachment-filter'];
- list( $post_mime_types, $avail_post_mime_types ) = wp_edit_attachments_query( $q );
-
- $this->is_trash = isset( $_REQUEST['status'] ) && 'trash' == $_REQUEST['status'];
+ $mode = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode'];
$this->set_pagination_args( array(
'total_items' => $wp_query->found_posts,
@@ -41,113 +84,222 @@ class WP_Media_List_Table extends WP_List_Table {
) );
}
- function get_views() {
- global $wpdb, $post_mime_types, $avail_post_mime_types;
+ /**
+ * @global array $post_mime_types
+ * @global array $avail_post_mime_types
+ * @return array
+ */
+ protected function get_views() {
+ global $post_mime_types, $avail_post_mime_types;
$type_links = array();
- $_num_posts = (array) wp_count_attachments();
- $_total_posts = array_sum($_num_posts) - $_num_posts['trash'];
- $total_orphans = $wpdb->get_var( "SELECT COUNT( * ) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_status != 'trash' AND post_parent < 1" );
- $matches = wp_match_mime_types(array_keys($post_mime_types), array_keys($_num_posts));
- foreach ( $matches as $type => $reals )
- foreach ( $reals as $real )
- $num_posts[$type] = ( isset( $num_posts[$type] ) ) ? $num_posts[$type] + $_num_posts[$real] : $_num_posts[$real];
-
- $class = ( empty($_GET['post_mime_type']) && !$this->detached && !isset($_GET['status']) ) ? ' class="current"' : '';
- $type_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $_total_posts, 'uploaded files' ), number_format_i18n( $_total_posts ) ) . '';
- foreach ( $post_mime_types as $mime_type => $label ) {
- $class = '';
- if ( !wp_match_mime_types($mime_type, $avail_post_mime_types) )
+ $filter = empty( $_GET['attachment-filter'] ) ? '' : $_GET['attachment-filter'];
+
+ $type_links['all'] = sprintf(
+ '',
+ selected( $filter, true, false ),
+ __( 'All media items' )
+ );
+
+ foreach ( $post_mime_types as $mime_type => $label ) {
+ if ( ! wp_match_mime_types( $mime_type, $avail_post_mime_types ) ) {
continue;
+ }
- if ( !empty($_GET['post_mime_type']) && wp_match_mime_types($mime_type, $_GET['post_mime_type']) )
- $class = ' class="current"';
- if ( !empty( $num_posts[$mime_type] ) )
- $type_links[$mime_type] = "" . sprintf( translate_nooped_plural( $label[2], $num_posts[$mime_type] ), number_format_i18n( $num_posts[$mime_type] )) . '';
- }
- $type_links['detached'] = 'detached ? ' class="current"' : '' ) . '>' . sprintf( _nx( 'Unattached (%s)', 'Unattached (%s)', $total_orphans, 'detached files' ), number_format_i18n( $total_orphans ) ) . '';
+ $selected = selected(
+ $filter && 0 === strpos( $filter, 'post_mime_type:' ) &&
+ wp_match_mime_types( $mime_type, str_replace( 'post_mime_type:', '', $filter ) ),
+ true,
+ false
+ );
- if ( !empty($_num_posts['trash']) )
- $type_links['trash'] = '' . sprintf( _nx( 'Trash (%s)', 'Trash (%s)', $_num_posts['trash'], 'uploaded files' ), number_format_i18n( $_num_posts['trash'] ) ) . '';
+ $type_links[$mime_type] = sprintf(
+ '',
+ esc_attr( $mime_type ),
+ $selected,
+ $label[0]
+ );
+ }
+ $type_links['detached'] = '';
+ if ( $this->is_trash || ( defined( 'MEDIA_TRASH') && MEDIA_TRASH ) ) {
+ $type_links['trash'] = sprintf(
+ '',
+ selected( 'trash' === $filter, true, false ),
+ _x( 'Trash', 'attachment filter' )
+ );
+ }
return $type_links;
}
- function get_bulk_actions() {
+ /**
+ *
+ * @return array
+ */
+ protected function get_bulk_actions() {
$actions = array();
- $actions['delete'] = __( 'Delete Permanently' );
+ if ( MEDIA_TRASH ) {
+ if ( $this->is_trash ) {
+ $actions['untrash'] = __( 'Restore' );
+ $actions['delete'] = __( 'Delete Permanently' );
+ } else {
+ $actions['trash'] = _x( 'Trash', 'verb' );
+ }
+ } else {
+ $actions['delete'] = __( 'Delete Permanently' );
+ }
+
if ( $this->detached )
- $actions['attach'] = __( 'Attach to a post' );
+ $actions['attach'] = __( 'Attach' );
return $actions;
}
- function extra_tablenav( $which ) {
+ /**
+ * @param string $which
+ */
+ protected function extra_tablenav( $which ) {
+ if ( 'bar' !== $which ) {
+ return;
+ }
?>
-
+
detached && !$this->is_trash ) {
- $this->months_dropdown( 'attachment' );
+ if ( ! is_singular() ) {
+ if ( ! $this->is_trash ) {
+ $this->months_dropdown( 'attachment' );
+ }
- do_action( 'restrict_manage_posts' );
- submit_button( __( 'Filter' ), 'button', false, false, array( 'id' => 'post-query-submit' ) );
+ /** This action is documented in wp-admin/includes/class-wp-posts-list-table.php */
+ do_action( 'restrict_manage_posts', $this->screen->post_type );
+
+ submit_button( __( 'Filter' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
}
- if ( $this->detached ) {
- submit_button( __( 'Scan for lost attachments' ), 'secondary', 'find_detached', false );
- } elseif ( $this->is_trash && current_user_can( 'edit_others_posts' ) ) {
+ if ( $this->is_trash && current_user_can( 'edit_others_posts' ) ) {
submit_button( __( 'Empty Trash' ), 'apply', 'delete_all', false );
} ?>
get_views();
+
+ $this->screen->render_screen_reader_content( 'heading_views' );
+?>
+
+
+ view_switcher( $mode ); ?>
+
+
+
+
+extra_tablenav( 'bar' );
+
+ /** This filter is documented in wp-admin/inclues/class-wp-list-table.php */
+ $views = apply_filters( "views_{$this->screen->id}", array() );
+
+ // Back compat for pre-4.0 view links.
+ if ( ! empty( $views ) ) {
+ echo '
';
+ foreach ( $views as $class => $view ) {
+ echo "- $view
";
+ }
+ echo '
';
+ }
+?>
+
+
+
+
+
+
+ ';
- $posts_columns['icon'] = '';
/* translators: column name */
$posts_columns['title'] = _x( 'File', 'column name' );
$posts_columns['author'] = __( 'Author' );
- $taxonomies = array();
-
$taxonomies = get_taxonomies_for_attachments( 'objects' );
$taxonomies = wp_filter_object_list( $taxonomies, array( 'show_admin_column' => true ), 'and', 'name' );
+ /**
+ * Filters the taxonomy columns for attachments in the Media list table.
+ *
+ * @since 3.5.0
+ *
+ * @param array $taxonomies An array of registered taxonomies to show for attachments.
+ * @param string $post_type The post type. Default 'attachment'.
+ */
$taxonomies = apply_filters( 'manage_taxonomies_for_attachment_columns', $taxonomies, 'attachment' );
$taxonomies = array_filter( $taxonomies, 'taxonomy_exists' );
foreach ( $taxonomies as $taxonomy ) {
- if ( 'category' == $taxonomy )
+ if ( 'category' === $taxonomy ) {
$column_key = 'categories';
- elseif ( 'post_tag' == $taxonomy )
+ } elseif ( 'post_tag' === $taxonomy ) {
$column_key = 'tags';
- else
+ } else {
$column_key = 'taxonomy-' . $taxonomy;
-
+ }
$posts_columns[ $column_key ] = get_taxonomy( $taxonomy )->labels->name;
}
@@ -155,16 +307,27 @@ class WP_Media_List_Table extends WP_List_Table {
if ( !$this->detached ) {
$posts_columns['parent'] = _x( 'Uploaded to', 'column name' );
if ( post_type_supports( 'attachment', 'comments' ) )
- $posts_columns['comments'] = '
';
+ $posts_columns['comments'] = '';
}
/* translators: column name */
$posts_columns['date'] = _x( 'Date', 'column name' );
- $posts_columns = apply_filters( 'manage_media_columns', $posts_columns, $this->detached );
-
- return $posts_columns;
+ /**
+ * Filters the Media list table columns.
+ *
+ * @since 2.5.0
+ *
+ * @param array $posts_columns An array of columns displayed in the Media list table.
+ * @param bool $detached Whether the list table contains media not attached
+ * to any posts. Default true.
+ */
+ return apply_filters( 'manage_media_columns', $posts_columns, $this->detached );
}
- function get_sortable_columns() {
+ /**
+ *
+ * @return array
+ */
+ protected function get_sortable_columns() {
return array(
'title' => 'title',
'author' => 'author',
@@ -174,188 +337,231 @@ class WP_Media_List_Table extends WP_List_Table {
);
}
- function display_rows() {
- global $post;
-
- add_filter( 'the_title','esc_html' );
- $alt = '';
-
- while ( have_posts() ) : the_post();
- $user_can_edit = current_user_can( 'edit_post', $post->ID );
-
- if ( $this->is_trash && $post->post_status != 'trash'
- || !$this->is_trash && $post->post_status == 'trash' )
- continue;
-
- $alt = ( 'alternate' == $alt ) ? '' : 'alternate';
- $post_owner = ( get_current_user_id() == $post->post_author ) ? 'self' : 'other';
- $att_title = _draft_or_post_title();
-?>
-
post_status ); ?>' valign="top">
-get_column_info();
-foreach ( $columns as $column_name => $column_display_name ) {
- $class = "class='$column_name column-$column_name'";
-
- $style = '';
- if ( in_array( $column_name, $hidden ) )
- $style = ' style="display:none;"';
-
- $attributes = $class . $style;
-
- switch ( $column_name ) {
-
- case 'cb':
-?>
-
-
-
-
-
- |
-
- >ID, array( 80, 60 ), true ) ) {
- if ( $this->is_trash || ! $user_can_edit ) {
- echo $thumb;
- } else {
-?>
-
-
-
+ /**
+ * Handles the checkbox column output.
+ *
+ * @since 4.3.0
+ * @access public
+ *
+ * @param WP_Post $post The current WP_Post object.
+ */
+ public function column_cb( $post ) {
+ if ( current_user_can( 'edit_post', $post->ID ) ) { ?>
+
+
+
- |
-post_mime_type );
+
+ $title = _draft_or_post_title();
+ $thumb = wp_get_attachment_image( $post->ID, array( 60, 60 ), true, array( 'alt' => '' ) );
+ $link_start = $link_end = '';
+
+ if ( current_user_can( 'edit_post', $post->ID ) && ! $this->is_trash ) {
+ $link_start = sprintf(
+ '',
+ get_edit_post_link( $post->ID ),
+ /* translators: %s: attachment title */
+ esc_attr( sprintf( __( '“%s” (Edit)' ), $title ) )
+ );
+ $link_end = '';
+ }
- case 'title':
-?>
- >
- is_trash || ! $user_can_edit ) {
- echo $att_title;
- } else { ?>
-
-
-
-
-ID ), $matches ) )
- echo esc_html( strtoupper( $matches[1] ) );
- else
- echo strtoupper( str_replace( 'image/', '', get_post_mime_type() ) );
-?>
-
-row_actions( $this->_get_row_actions( $post, $att_title ) );
-?>
- |
-
+ >
+
+
+
+
+
+
+ ID );
+ echo esc_html( wp_basename( $file ) );
+ ?>
+
+
- >%s',
- esc_url( add_query_arg( array( 'author' => get_the_author_meta('ID') ), 'upload.php' ) ),
- get_the_author()
- );
- ?> |
-%s',
+ esc_url( add_query_arg( array( 'author' => get_the_author_meta('ID') ), 'upload.php' ) ),
+ get_the_author()
+ );
+ }
- case 'desc':
-?>
- >post_excerpt : ''; ?> |
-post_excerpt : '';
+ }
- case 'date':
- if ( '0000-00-00 00:00:00' == $post->post_date ) {
+ /**
+ * Handles the date column output.
+ *
+ * @since 4.3.0
+ * @access public
+ *
+ * @param WP_Post $post The current WP_Post object.
+ */
+ public function column_date( $post ) {
+ if ( '0000-00-00 00:00:00' === $post->post_date ) {
$h_time = __( 'Unpublished' );
} else {
$m_time = $post->post_date;
$time = get_post_time( 'G', true, $post, false );
if ( ( abs( $t_diff = time() - $time ) ) < DAY_IN_SECONDS ) {
- if ( $t_diff < 0 )
+ if ( $t_diff < 0 ) {
$h_time = sprintf( __( '%s from now' ), human_time_diff( $time ) );
- else
+ } else {
$h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) );
+ }
} else {
$h_time = mysql2date( __( 'Y/m/d' ), $m_time );
}
}
-?>
- > |
-post_parent > 0 && get_post( $post->post_parent ) ) {
+ echo $h_time;
+ }
+
+ /**
+ * Handles the parent column output.
+ *
+ * @since 4.3.0
+ * @access public
+ *
+ * @param WP_Post $post The current WP_Post object.
+ */
+ public function column_parent( $post ) {
+ $user_can_edit = current_user_can( 'edit_post', $post->ID );
+
+ if ( $post->post_parent > 0 ) {
+ $parent = get_post( $post->post_parent );
+ } else {
+ $parent = false;
+ }
+
+ if ( $parent ) {
$title = _draft_or_post_title( $post->post_parent );
+ $parent_type = get_post_type_object( $parent->post_type );
+
+ if ( $parent_type && $parent_type->show_ui && current_user_can( 'edit_post', $post->post_parent ) ) {
?>
- >
- post_parent ) ) { ?>
-
- ,
-
- |
-
+ post_parent ) ) {
?>
- >
-
-
-
- |
- $post->post_parent,
+ 'media[]' => $post->ID,
+ '_wpnonce' => wp_create_nonce( 'bulk-' . $this->_args['plural'] )
+ ), 'upload.php' );
+ printf(
+ '
%s',
+ $detach_url,
+ /* translators: %s: title of the post the attachment is attached to */
+ esc_attr( sprintf( __( 'Detach from “%s”' ), $title ) ),
+ __( 'Detach' )
+ );
+ endif;
+ } else {
+ _e( '(Unattached)' ); ?>
+ post_parent );
+ printf(
+ '
%s',
+ $post->ID,
+ /* translators: %s: attachment title */
+ esc_attr( sprintf( __( 'Attach “%s” to existing content' ), $title ) ),
+ __( 'Attach' )
+ );
+ }
}
- break;
+ }
- case 'comments':
- $attributes = 'class="comments column-comments num"' . $style;
-?>
- >
-
-ID );
+ /**
+ * Handles the comments column output.
+ *
+ * @since 4.3.0
+ * @access public
+ *
+ * @param WP_Post $post The current WP_Post object.
+ */
+ public function column_comments( $post ) {
+ echo ' ';
+
+ if ( isset( $this->comment_pending_count[ $post->ID ] ) ) {
+ $pending_comments = $this->comment_pending_count[ $post->ID ];
+ } else {
+ $pending_comments = get_pending_comments_num( $post->ID );
+ }
$this->comments_bubble( $post->ID, $pending_comments );
-?>
-
- |
-';
+ }
+
+ /**
+ * Handles output for the default column.
+ *
+ * @since 4.3.0
+ * @access public
+ *
+ * @param WP_Post $post The current WP_Post object.
+ * @param string $column_name Current column name.
+ */
+ public function column_default( $post, $column_name ) {
+ if ( 'categories' === $column_name ) {
$taxonomy = 'category';
- elseif ( 'tags' == $column_name )
+ } elseif ( 'tags' === $column_name ) {
$taxonomy = 'post_tag';
- elseif ( 0 === strpos( $column_name, 'taxonomy-' ) )
+ } elseif ( 0 === strpos( $column_name, 'taxonomy-' ) ) {
$taxonomy = substr( $column_name, 9 );
- else
+ } else {
$taxonomy = false;
+ }
if ( $taxonomy ) {
- $taxonomy_object = get_taxonomy( $taxonomy );
- echo '';
- if ( $terms = get_the_terms( $post->ID, $taxonomy ) ) {
+ $terms = get_the_terms( $post->ID, $taxonomy );
+ if ( is_array( $terms ) ) {
$out = array();
foreach ( $terms as $t ) {
$posts_in_term_qv = array();
@@ -370,62 +576,207 @@ foreach ( $columns as $column_name => $column_display_name ) {
/* translators: used between list items, there is a space after the comma */
echo join( __( ', ' ), $out );
} else {
- echo '—';
+ echo '—' . get_taxonomy( $taxonomy )->labels->no_terms . '';
}
- echo ' | ';
- break;
+
+ return;
}
-?>
- >
- ID ); ?>
- |
-ID );
}
-}
-?>
-
-posts, 'ID' );
+ reset( $wp_query->posts );
+
+ $this->comment_pending_count = get_pending_comments_num( $post_ids );
+
+ add_filter( 'the_title','esc_html' );
+
+ while ( have_posts() ) : the_post();
+ if (
+ ( $this->is_trash && $post->post_status != 'trash' )
+ || ( ! $this->is_trash && $post->post_status === 'trash' )
+ ) {
+ continue;
+ }
+ $post_owner = ( get_current_user_id() == $post->post_author ) ? 'self' : 'other';
+ ?>
+
+ single_row_columns( $post ); ?>
+
+ detached ) {
- if ( current_user_can( 'edit_post', $post->ID ) )
- $actions['edit'] = '
' . __( 'Edit' ) . '';
- if ( current_user_can( 'delete_post', $post->ID ) )
+ if ( current_user_can( 'edit_post', $post->ID ) ) {
+ $actions['edit'] = sprintf(
+ '
%s',
+ get_edit_post_link( $post->ID ),
+ /* translators: %s: attachment title */
+ esc_attr( sprintf( __( 'Edit “%s”' ), $att_title ) ),
+ __( 'Edit' )
+ );
+ }
+ if ( current_user_can( 'delete_post', $post->ID ) ) {
if ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) {
- $actions['trash'] = "
ID ) . "'>" . __( 'Trash' ) . "";
+ $actions['trash'] = sprintf(
+ '
%s',
+ wp_nonce_url( "post.php?action=trash&post=$post->ID", 'trash-post_' . $post->ID ),
+ /* translators: %s: attachment title */
+ esc_attr( sprintf( __( 'Move “%s” to the Trash' ), $att_title ) ),
+ _x( 'Trash', 'verb' )
+ );
} else {
- $delete_ays = !MEDIA_TRASH ? " onclick='return showNotice.warn();'" : '';
- $actions['delete'] = "
ID ) . "'>" . __( 'Delete Permanently' ) . "";
+ $delete_ays = ! MEDIA_TRASH ? " onclick='return showNotice.warn();'" : '';
+ $actions['delete'] = sprintf(
+ '
%s',
+ wp_nonce_url( "post.php?action=delete&post=$post->ID", 'delete-post_' . $post->ID ),
+ $delete_ays,
+ /* translators: %s: attachment title */
+ esc_attr( sprintf( __( 'Delete “%s” permanently' ), $att_title ) ),
+ __( 'Delete Permanently' )
+ );
}
- $actions['view'] = '
' . __( 'View' ) . '';
- if ( current_user_can( 'edit_post', $post->ID ) )
- $actions['attach'] = '
'.__( 'Attach' ).'';
+ }
+ $actions['view'] = sprintf(
+ '
%s',
+ get_permalink( $post->ID ),
+ /* translators: %s: attachment title */
+ esc_attr( sprintf( __( 'View “%s”' ), $att_title ) ),
+ __( 'View' )
+ );
+
+ if ( current_user_can( 'edit_post', $post->ID ) ) {
+ $actions['attach'] = sprintf(
+ '
%s',
+ $post->ID,
+ /* translators: %s: attachment title */
+ esc_attr( sprintf( __( 'Attach “%s” to existing content' ), $att_title ) ),
+ __( 'Attach' )
+ );
+ }
}
else {
- if ( current_user_can( 'edit_post', $post->ID ) && !$this->is_trash )
- $actions['edit'] = '
' . __( 'Edit' ) . '';
+ if ( current_user_can( 'edit_post', $post->ID ) && !$this->is_trash ) {
+ $actions['edit'] = sprintf(
+ '
%s',
+ get_edit_post_link( $post->ID ),
+ /* translators: %s: attachment title */
+ esc_attr( sprintf( __( 'Edit “%s”' ), $att_title ) ),
+ __( 'Edit' )
+ );
+ }
if ( current_user_can( 'delete_post', $post->ID ) ) {
- if ( $this->is_trash )
- $actions['untrash'] = "
ID ) . "'>" . __( 'Restore' ) . "";
- elseif ( EMPTY_TRASH_DAYS && MEDIA_TRASH )
- $actions['trash'] = "
ID ) . "'>" . __( 'Trash' ) . "";
- if ( $this->is_trash || !EMPTY_TRASH_DAYS || !MEDIA_TRASH ) {
+ if ( $this->is_trash ) {
+ $actions['untrash'] = sprintf(
+ '
%s',
+ wp_nonce_url( "post.php?action=untrash&post=$post->ID", 'untrash-post_' . $post->ID ),
+ /* translators: %s: attachment title */
+ esc_attr( sprintf( __( 'Restore “%s” from the Trash' ), $att_title ) ),
+ __( 'Restore' )
+ );
+ } elseif ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) {
+ $actions['trash'] = sprintf(
+ '
%s',
+ wp_nonce_url( "post.php?action=trash&post=$post->ID", 'trash-post_' . $post->ID ),
+ /* translators: %s: attachment title */
+ esc_attr( sprintf( __( 'Move “%s” to the Trash' ), $att_title ) ),
+ _x( 'Trash', 'verb' )
+ );
+ }
+ if ( $this->is_trash || ! EMPTY_TRASH_DAYS || ! MEDIA_TRASH ) {
$delete_ays = ( !$this->is_trash && !MEDIA_TRASH ) ? " onclick='return showNotice.warn();'" : '';
- $actions['delete'] = "
ID ) . "'>" . __( 'Delete Permanently' ) . "";
+ $actions['delete'] = sprintf(
+ '
%s',
+ wp_nonce_url( "post.php?action=delete&post=$post->ID", 'delete-post_' . $post->ID ),
+ $delete_ays,
+ /* translators: %s: attachment title */
+ esc_attr( sprintf( __( 'Delete “%s” permanently' ), $att_title ) ),
+ __( 'Delete Permanently' )
+ );
}
}
- if ( !$this->is_trash ) {
- $title =_draft_or_post_title( $post->post_parent );
- $actions['view'] = '
' . __( 'View' ) . '';
+ if ( ! $this->is_trash ) {
+ $actions['view'] = sprintf(
+ '
%s',
+ get_permalink( $post->ID ),
+ /* translators: %s: attachment title */
+ esc_attr( sprintf( __( 'View “%s”' ), $att_title ) ),
+ __( 'View' )
+ );
}
}
- $actions = apply_filters( 'media_row_actions', $actions, $post, $this->detached );
+ /**
+ * Filters the action links for each attachment in the Media list table.
+ *
+ * @since 2.8.0
+ *
+ * @param array $actions An array of action links for each attachment.
+ * Default 'Edit', 'Delete Permanently', 'View'.
+ * @param WP_Post $post WP_Post object for the current attachment.
+ * @param bool $detached Whether the list table contains media not attached
+ * to any posts. Default true.
+ */
+ return apply_filters( 'media_row_actions', $actions, $post, $this->detached );
+ }
- return $actions;
+ /**
+ * Generates and displays row action links.
+ *
+ * @since 4.3.0
+ * @access protected
+ *
+ * @param object $post Attachment being acted upon.
+ * @param string $column_name Current column name.
+ * @param string $primary Primary column name.
+ * @return string Row actions output for media attachments.
+ */
+ protected function handle_row_actions( $post, $column_name, $primary ) {
+ if ( $primary !== $column_name ) {
+ return '';
+ }
+
+ $att_title = _draft_or_post_title();
+ return $this->row_actions( $this->_get_row_actions( $post, $att_title ) );
}
}