+ /**
+ * Generates and displays row action links.
+ *
+ * @since 4.3.0
+ * @access protected
+ *
+ * @param object $post Post being acted upon.
+ * @param string $column_name Current column name.
+ * @param string $primary Primary column name.
+ * @return string Row actions output for posts.
+ */
+ protected function handle_row_actions( $post, $column_name, $primary ) {
+ if ( $primary !== $column_name ) {
+ return '';
+ }
+
+ $post_type_object = get_post_type_object( $post->post_type );
+ $can_edit_post = current_user_can( 'edit_post', $post->ID );
+ $actions = array();
+ $title = _draft_or_post_title();
+
+ if ( $can_edit_post && 'trash' != $post->post_status ) {
+ $actions['edit'] = sprintf(
+ '<a href="%s" aria-label="%s">%s</a>',
+ get_edit_post_link( $post->ID ),
+ /* translators: %s: post title */
+ esc_attr( sprintf( __( 'Edit “%s”' ), $title ) ),
+ __( 'Edit' )
+ );
+ $actions['inline hide-if-no-js'] = sprintf(
+ '<a href="#" class="editinline" aria-label="%s">%s</a>',
+ /* translators: %s: post title */
+ esc_attr( sprintf( __( 'Quick edit “%s” inline' ), $title ) ),
+ __( 'Quick Edit' )
+ );
+ }
+
+ if ( current_user_can( 'delete_post', $post->ID ) ) {
+ if ( 'trash' === $post->post_status ) {
+ $actions['untrash'] = sprintf(
+ '<a href="%s" aria-label="%s">%s</a>',
+ wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&action=untrash', $post->ID ) ), 'untrash-post_' . $post->ID ),
+ /* translators: %s: post title */
+ esc_attr( sprintf( __( 'Restore “%s” from the Trash' ), $title ) ),
+ __( 'Restore' )