WordPress.org

Make WordPress Core


Ignore:
Timestamp:
05/29/2015 02:40:52 AM (7 years ago)
Author:
helen
Message:

List tables: introduce the concept of a "primary" column.

This becomes the column that contains the row actions, and allows for a more flexibility, particularly with custom post types and list tables. To (re)define the primary column, use the list_table_primary_column filter, which receives the column name and the screen ID as arguments.

props stephdau, DaveAl, jesin.
see #25408.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/class-wp-posts-list-table.php

    r32642 r32644  
    685685    <?php
    686686
    687         list( $columns, $hidden ) = $this->get_column_info();
     687        list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info();
    688688
    689689        foreach ( $columns as $column_name => $column_display_name ) {
    690             $class = "class=\"$column_name column-$column_name\"";
     690            $classes = "$column_name column-$column_name";
     691            if ( $primary === $column_name ) {
     692                $classes .= ' has-row-actions column-primary';
     693            }
    691694
    692695            $style = '';
    693             if ( in_array( $column_name, $hidden ) )
     696            if ( in_array( $column_name, $hidden ) ) {
    694697                $style = ' style="display:none;"';
    695 
    696             $attributes = "$class$style";
     698            }
     699
     700            $attributes = "class='$classes'$style";
    697701
    698702            switch ( $column_name ) {
     
    716720
    717721            case 'title':
    718                 $attributes = 'class="post-title page-title column-title"' . $style;
     722                $classes .= ' page-title'; // Special addition for title column
     723                $attributes = "class='$classes'$style";
    719724                if ( $this->hierarchical_display ) {
    720725                    if ( 0 == $level && (int) $post->post_parent > 0 ) {
     
    773778                        the_excerpt();
    774779
    775                 $actions = array();
    776                 if ( $can_edit_post && 'trash' != $post->post_status ) {
    777                     $actions['edit'] = '<a href="' . get_edit_post_link( $post->ID ) . '" title="' . esc_attr__( 'Edit this item' ) . '">' . __( 'Edit' ) . '</a>';
    778                     $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="' . esc_attr__( 'Edit this item inline' ) . '">' . __( 'Quick&nbsp;Edit' ) . '</a>';
    779                 }
    780                 if ( current_user_can( 'delete_post', $post->ID ) ) {
    781                     if ( 'trash' == $post->post_status )
    782                         $actions['untrash'] = "<a title='" . esc_attr__( 'Restore this item from the Trash' ) . "' href='" . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&amp;action=untrash', $post->ID ) ), 'untrash-post_' . $post->ID ) . "'>" . __( 'Restore' ) . "</a>";
    783                     elseif ( EMPTY_TRASH_DAYS )
    784                         $actions['trash'] = "<a class='submitdelete' title='" . esc_attr__( 'Move this item to the Trash' ) . "' href='" . get_delete_post_link( $post->ID ) . "'>" . __( 'Trash' ) . "</a>";
    785                     if ( 'trash' == $post->post_status || !EMPTY_TRASH_DAYS )
    786                         $actions['delete'] = "<a class='submitdelete' title='" . esc_attr__( 'Delete this item permanently' ) . "' href='" . get_delete_post_link( $post->ID, '', true ) . "'>" . __( 'Delete Permanently' ) . "</a>";
    787                 }
    788                 if ( $post_type_object->public ) {
    789                     if ( in_array( $post->post_status, array( 'pending', 'draft', 'future' ) ) ) {
    790                         if ( $can_edit_post ) {
    791                             $preview_link = set_url_scheme( get_permalink( $post->ID ) );
    792                             /** This filter is documented in wp-admin/includes/meta-boxes.php */
    793                             $preview_link = apply_filters( 'preview_post_link', add_query_arg( 'preview', 'true', $preview_link ), $post );
    794                             $actions['view'] = '<a href="' . esc_url( $preview_link ) . '" title="' . esc_attr( sprintf( __( 'Preview &#8220;%s&#8221;' ), $title ) ) . '" rel="permalink">' . __( 'Preview' ) . '</a>';
    795                         }
    796                     } elseif ( 'trash' != $post->post_status ) {
    797                         $actions['view'] = '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( sprintf( __( 'View &#8220;%s&#8221;' ), $title ) ) . '" rel="permalink">' . __( 'View' ) . '</a>';
    798                     }
    799                 }
    800 
    801                 if ( is_post_type_hierarchical( $post->post_type ) ) {
    802 
    803                     /**
    804                      * Filter the array of row action links on the Pages list table.
    805                      *
    806                      * The filter is evaluated only for hierarchical post types.
    807                      *
    808                      * @since 2.8.0
    809                      *
    810                      * @param array   $actions An array of row action links. Defaults are
    811                      *                         'Edit', 'Quick Edit', 'Restore, 'Trash',
    812                      *                         'Delete Permanently', 'Preview', and 'View'.
    813                      * @param WP_Post $post    The post object.
    814                      */
    815                     $actions = apply_filters( 'page_row_actions', $actions, $post );
    816                 } else {
    817 
    818                     /**
    819                      * Filter the array of row action links on the Posts list table.
    820                      *
    821                      * The filter is evaluated only for non-hierarchical post types.
    822                      *
    823                      * @since 2.8.0
    824                      *
    825                      * @param array   $actions An array of row action links. Defaults are
    826                      *                         'Edit', 'Quick Edit', 'Restore, 'Trash',
    827                      *                         'Delete Permanently', 'Preview', and 'View'.
    828                      * @param WP_Post $post    The post object.
    829                      */
    830                     $actions = apply_filters( 'post_row_actions', $actions, $post );
    831                 }
    832 
    833                 echo $this->row_actions( $actions );
     780                echo $this->handle_row_actions( $post, $column_name, $primary );
    834781
    835782                get_inline_data( $post );
     
    888835                    _e( 'Last Modified' );
    889836                }
     837                echo $this->handle_row_actions( $post, $column_name, $primary );
    890838                echo '</td>';
    891839            break;
     
    899847                $this->comments_bubble( $post->ID, $pending_comments );
    900848            ?>
    901             </div></td>
     849            </div><?php echo $this->handle_row_actions( $post, $column_name, $primary ); ?></td>
    902850            <?php
    903851            break;
     
    910858                    get_the_author()
    911859                );
     860                echo $this->handle_row_actions( $post, $column_name, $primary );
    912861            ?></td>
    913862            <?php
     
    950899                        echo '&#8212;';
    951900                    }
     901                    echo $this->handle_row_actions( $post, $column_name, $primary );
    952902                    echo '</td>';
    953903                    break;
     
    996946                 */
    997947                do_action( "manage_{$post->post_type}_posts_custom_column", $column_name, $post->ID );
     948                echo $this->handle_row_actions( $post, $column_name, $primary );
    998949            ?></td>
    999950            <?php
     
    1005956    <?php
    1006957        $GLOBALS['post'] = $global_post;
     958    }
     959
     960    /**
     961     * Get name of default primary column
     962     *
     963     * @since 4.3.0
     964     * @access protected
     965     *
     966     * @return string
     967     */
     968    protected function get_default_primary_column_name() {
     969        return( 'title' );
     970    }
     971
     972    /**
     973     * Generate and display row actions links
     974     *
     975     * @since 4.3.0
     976     * @access protected
     977     *
     978     * @param object $post Post being acted upon
     979     * @param string $column_name Current column name
     980     * @param string $primary Primary column name
     981     *
     982     * @return string
     983     */
     984    protected function handle_row_actions( $post, $column_name, $primary ) {
     985        $title = _draft_or_post_title();
     986
     987        if ( $primary === $column_name ) {
     988            $post_type_object = get_post_type_object( $post->post_type );
     989            $can_edit_post = current_user_can( 'edit_post', $post->ID );
     990            $actions = array();
     991
     992            if ( $can_edit_post && 'trash' != $post->post_status ) {
     993                $actions['edit'] = '<a href="' . get_edit_post_link( $post->ID ) . '" title="' . esc_attr__( 'Edit this item' ) . '">' . __( 'Edit' ) . '</a>';
     994                $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="' . esc_attr__( 'Edit this item inline' ) . '">' . __( 'Quick&nbsp;Edit' ) . '</a>';
     995            }
     996
     997            if ( current_user_can( 'delete_post', $post->ID ) ) {
     998                if ( 'trash' == $post->post_status )
     999                    $actions['untrash'] = "<a title='" . esc_attr__( 'Restore this item from the Trash' ) . "' href='" . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&amp;action=untrash', $post->ID ) ), 'untrash-post_' . $post->ID ) . "'>" . __( 'Restore' ) . "</a>";
     1000                elseif ( EMPTY_TRASH_DAYS )
     1001                    $actions['trash'] = "<a class='submitdelete' title='" . esc_attr__( 'Move this item to the Trash' ) . "' href='" . get_delete_post_link( $post->ID ) . "'>" . __( 'Trash' ) . "</a>";
     1002                if ( 'trash' == $post->post_status || !EMPTY_TRASH_DAYS )
     1003                    $actions['delete'] = "<a class='submitdelete' title='" . esc_attr__( 'Delete this item permanently' ) . "' href='" . get_delete_post_link( $post->ID, '', true ) . "'>" . __( 'Delete Permanently' ) . "</a>";
     1004            }
     1005
     1006            if ( $post_type_object->public ) {
     1007                if ( in_array( $post->post_status, array( 'pending', 'draft', 'future' ) ) ) {
     1008                    if ( $can_edit_post ) {
     1009                        $preview_link = set_url_scheme( get_permalink( $post->ID ) );
     1010                        /** This filter is documented in wp-admin/includes/meta-boxes.php */
     1011                        $preview_link = apply_filters( 'preview_post_link', add_query_arg( 'preview', 'true', $preview_link ), $post );
     1012                        $actions['view'] = '<a href="' . esc_url( $preview_link ) . '" title="' . esc_attr( sprintf( __( 'Preview &#8220;%s&#8221;' ), $title ) ) . '" rel="permalink">' . __( 'Preview' ) . '</a>';
     1013                    }
     1014                } elseif ( 'trash' != $post->post_status ) {
     1015                    $actions['view'] = '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( sprintf( __( 'View &#8220;%s&#8221;' ), $title ) ) . '" rel="permalink">' . __( 'View' ) . '</a>';
     1016                }
     1017            }
     1018
     1019            if ( is_post_type_hierarchical( $post->post_type ) ) {
     1020
     1021                /**
     1022                 * Filter the array of row action links on the Pages list table.
     1023                 *
     1024                 * The filter is evaluated only for hierarchical post types.
     1025                 *
     1026                 * @since 2.8.0
     1027                 *
     1028                 * @param array $actions An array of row action links. Defaults are
     1029                 *                         'Edit', 'Quick Edit', 'Restore, 'Trash',
     1030                 *                         'Delete Permanently', 'Preview', and 'View'.
     1031                 * @param WP_Post $post The post object.
     1032                 */
     1033                $actions = apply_filters( 'page_row_actions', $actions, $post );
     1034            } else {
     1035
     1036                /**
     1037                 * Filter the array of row action links on the Posts list table.
     1038                 *
     1039                 * The filter is evaluated only for non-hierarchical post types.
     1040                 *
     1041                 * @since 2.8.0
     1042                 *
     1043                 * @param array $actions An array of row action links. Defaults are
     1044                 *                         'Edit', 'Quick Edit', 'Restore, 'Trash',
     1045                 *                         'Delete Permanently', 'Preview', and 'View'.
     1046                 * @param WP_Post $post The post object.
     1047                 */
     1048                $actions = apply_filters( 'post_row_actions', $actions, $post );
     1049            }
     1050
     1051            return $this->row_actions( $actions );
     1052        }
    10071053    }
    10081054
Note: See TracChangeset for help on using the changeset viewer.