WordPress.org

Make WordPress Core

Ticket #23770: 23770.2.diff

File 23770.2.diff, 8.7 KB (added by DrewAPicture, 7 years ago)

List table first-pass

  • wp-admin/css/wp-admin.css

     
    74137413        margin-top: -2px;
    74147414}
    74157415
     7416.select-nav-menu-wrapper {
     7417        padding: 5px 0;
     7418}
     7419
     7420.select-nav-menu-wrapper select {
     7421        float: left;
     7422        width: 160px;
     7423        margin-right: 5px;
     7424}
     7425
    74167426#wpbody .open-label {
    74177427        display: block;
    74187428        float:left;
  • wp-admin/includes/class-wp-menu-locations-list-table.php

     
     1<?php
     2/**
     3 * Nav Menu Locations List Table class
     4 *
     5 * @package WordPress
     6 * @subpackage List_Table
     7 * @since 3.6.0
     8 * @access private
     9 */
     10
     11class WP_Menu_Locations_List_Table extends WP_List_Table {
     12       
     13        function __construct( $args = array() ) {
     14                parent::__construct( array(
     15                        'plural'   => 'menu locations',
     16                        'singular' => 'menu location',
     17                        'ajax'     => true,
     18                        'screen'   => isset( $args['screen'] ) ? $args['screen'] : null
     19                ) );
     20        }
     21       
     22        function ajax_user_can() {
     23                return current_user_can( 'edit_theme_options' );
     24        }
     25       
     26        function prepare_items() {
     27                $columns = $this->get_columns();
     28                $hidden = array();
     29                $sortable = $this->get_sortable_columns();
     30                $this->_column_headers = array( $columns, $hidden, $sortable );
     31
     32                $total_items = count( array_keys( get_registered_nav_menus() ) );
     33
     34                $per_page = apply_filters( 'menu_locations_per_page', $this->get_items_per_page( 'menu_locations_per_page' ) );
     35                $this->set_pagination_args( array(
     36                        'total_items' => $total_items,
     37                        'per_page'    => $per_page,
     38                        'total_pages' => ceil( $total_items / $per_page )
     39                ) );
     40
     41                $this->items = get_registered_nav_menus();
     42        }
     43       
     44        function single_row( $location ) {
     45                static $row_class = '';
     46                $row_class = ( $row_class == '' ? ' class="alternate"' : '' );
     47
     48                echo '<tr id="' . esc_attr( 'location-' . $location  ) . '"' . $row_class . '>';
     49                echo $this->single_row_columns( $location );
     50                echo '</tr>';
     51        }
     52
     53        function get_columns() {
     54                $columns = array(
     55                        'locations' => __( 'Theme Locations' ),
     56                        'menus'     => __( 'Assigned Menus' )
     57                );
     58                return $columns;
     59        }
     60       
     61        function get_sortable_columns() {
     62                return $sortable_cols = array( 'locations' => array( 'locations', true ) );
     63        }
     64       
     65        function column_locations( $location ) {
     66                return sprintf( '<span class="menu-location-title"><strong>%s</strong></span>', $location );
     67        }
     68       
     69        function column_menus( $location ) {
     70                $menus = wp_get_nav_menus();
     71                $menu_locations = get_nav_menu_locations();
     72                ?>
     73                <div class="select-nav-menu-wrapper">
     74                        <span>
     75                        <select name="menu-locations[<?php echo $location; ?>]" id="locations-<?php echo $location; ?>">
     76                                <option value="0"><?php printf( '&mdash; %s &mdash;', esc_html__( 'Select a Menu' ) ); ?></option>
     77                                <?php
     78                                foreach ( $menus as $menu ) : // TODO: Actually select assigned menu ?>
     79                                <option<?php selected( isset( $menu_locations[ $location ] ) && $menu_locations[ $location ] == $menu->term_id ); ?> value="<?php echo $menu->term_id; ?>">
     80                                        <?php
     81                                        $truncated_name = wp_html_excerpt( $menu->name, 40 );
     82                                        echo $truncated_name == $menu->name ? $menu->name : trim( $truncated_name ) . '&hellip;';
     83                                        ?>
     84                                </option>
     85                                <?php endforeach; ?>
     86                        </select>
     87                        <!-- TODO: Add proper links -->
     88                        <a href="#"><?php _ex( 'Edit', 'menu' ); ?></a> |
     89                        <a href="#"><?php _ex( 'Add New', 'menu' ); ?></a>
     90                        </span>
     91                </div><!-- .select-nav-menu-wrapper -->
     92                <?php
     93        }
     94       
     95} // WP_Theme_Locations_List_Table
  • wp-admin/includes/list-table.php

     
    2020function _get_list_table( $class, $args = array() ) {
    2121        $core_classes = array(
    2222                //Site Admin
    23                 'WP_Posts_List_Table' => 'posts',
    24                 'WP_Media_List_Table' => 'media',
    25                 'WP_Terms_List_Table' => 'terms',
    26                 'WP_Users_List_Table' => 'users',
    27                 'WP_Comments_List_Table' => 'comments',
    28                 'WP_Post_Comments_List_Table' => 'comments',
    29                 'WP_Links_List_Table' => 'links',
     23                'WP_Posts_List_Table'          => 'posts',
     24                'WP_Media_List_Table'          => 'media',
     25                'WP_Terms_List_Table'          => 'terms',
     26                'WP_Users_List_Table'          => 'users',
     27                'WP_Comments_List_Table'       => 'comments',
     28                'WP_Post_Comments_List_Table'  => 'comments',
     29                'WP_Links_List_Table'          => 'links',
    3030                'WP_Plugin_Install_List_Table' => 'plugin-install',
    31                 'WP_Themes_List_Table' => 'themes',
    32                 'WP_Theme_Install_List_Table' => array( 'themes', 'theme-install' ),
    33                 'WP_Plugins_List_Table' => 'plugins',
     31                'WP_Themes_List_Table'         => 'themes',
     32                'WP_Theme_Install_List_Table'  => array( 'themes', 'theme-install' ),
     33                'WP_Menu_Locations_List_Table' => 'menu-locations',
     34                'WP_Plugins_List_Table'        => 'plugins',
    3435                // Network Admin
    35                 'WP_MS_Sites_List_Table' => 'ms-sites',
    36                 'WP_MS_Users_List_Table' => 'ms-users',
    37                 'WP_MS_Themes_List_Table' => 'ms-themes',
     36                'WP_MS_Sites_List_Table'       => 'ms-sites',
     37                'WP_MS_Users_List_Table'       => 'ms-users',
     38                'WP_MS_Themes_List_Table'      => 'ms-themes',
    3839        );
    3940
    4041        if ( isset( $core_classes[ $class ] ) ) {
  • wp-admin/nav-menus.php

     
    341341                        }
    342342                }
    343343                break;
     344        case 'locations':
     345
     346                break;
    344347}
    345348
    346349// Get all nav menus
     
    350353// Are we on the add new screen?
    351354$add_new_screen = ( isset( $_GET['menu'] ) && 0 == $_GET['menu'] ) ? true : false;
    352355
     356$locations_screen = ( isset( $_GET['action'] ) && 'locations' == $_GET['action'] ) ? true : false;
     357
    353358// If we have one theme location, and zero menus, we take them right into editing their first menu
    354359$page_count = wp_count_posts( 'page' );
    355360$one_theme_location_no_menus = ( 1 == count( get_registered_nav_menus() ) && ! $add_new_screen && empty( $nav_menus ) && ! empty( $page_count->publish ) ) ? true : false;
     
    464469?>
    465470<div class="wrap">
    466471        <?php screen_icon(); ?>
    467         <h2><?php _e( 'Menus' ); ?> <a href="<?php echo esc_url( add_query_arg( array( 'action' => 'edit', 'menu' => 0, ), admin_url( 'nav-menus.php' ) ) ); ?>" class="add-new-h2"><?php _ex( 'Add New', 'menu' ); ?></a></h2>
     472        <h2 class="nav-tab-wrapper">
     473                <a href="<?php echo admin_url( 'nav-menus.php' ); ?>" class="nav-tab<?php if ( ! isset( $_GET['action'] ) || isset( $_GET['action'] ) && 'locations' != $_GET['action'] ) echo ' nav-tab-active'; ?>"><?php esc_html_e('Edit Menus'); ?></a>
     474                <a href="<?php echo esc_url( add_query_arg( array( 'action' => 'locations' ), admin_url( 'nav-menus.php' ) ) ); ?>" class="nav-tab<?php if ( isset( $_GET['action'] ) && 'locations' == $_GET['action'] ) echo ' nav-tab-active'; ?>"><?php esc_html_e('Manage Locations'); ?></a>
     475        </h2>
    468476        <?php
    469477        foreach( $messages as $message ) :
    470478                echo $message . "\n";
    471479        endforeach;
    472480        ?>
     481        <?php
     482        if ( $locations_screen ) :
     483                echo '<p>' . __( 'Some explanatory/howto text should probably go here.' ) . '</p>';
     484                $wp_list_table = _get_list_table( 'WP_Menu_Locations_List_Table' );
     485                $wp_list_table->prepare_items();
     486                $wp_list_table->display();
     487                // TODO: Add Save button
     488        else : ?>
    473489        <div class="manage-menus">
    474         <?php if ( $menu_count < 2 ) : ?>
     490                <?php if ( $menu_count < 2 ) : ?>
    475491                <span class="add-edit-menu-action">
    476492                        <?php printf( __( 'Edit your menu below, or <a href="%s">create a new menu</a>.' ), esc_url( add_query_arg( array( 'action' => 'edit', 'menu' => 0 ), admin_url( 'nav-menus.php' ) ) ) ); ?>
    477493                </span><!-- /add-edit-menu-action -->
    478         <?php else : ?>
     494                <?php else : ?>
    479495                <form method="post" action="<?php echo admin_url( 'nav-menus.php' ); ?>">
    480496                        <input type="hidden" name="action" value="edit" />
    481497                        <label for="menu" class="selected-menu"><?php _e( 'Select a menu to edit:' ); ?></label>
     
    510526                                <?php printf( __( 'or <a href="%s">create a new menu</a>.' ), esc_url( add_query_arg( array( 'action' => 'edit', 'menu' => 0 ), admin_url( 'nav-menus.php' ) ) ) ); ?>
    511527                        </span><!-- /add-new-menu-action -->
    512528                </form>
    513         <?php endif; ?>
     529                <?php endif; ?>
    514530        </div><!-- /manage-menus -->
    515531        <div id="nav-menus-frame">
    516532        <div id="menu-settings-column" class="metabox-holder<?php if ( isset( $_GET['menu'] ) && '0' == $_GET['menu'] ) { echo ' metabox-holder-disabled'; } ?>">
     
    623639                </div><!-- /#menu-management -->
    624640        </div><!-- /#menu-management-liquid -->
    625641        </div><!-- /#nav-menus-frame -->
     642        <?php endif; ?>
    626643</div><!-- /.wrap-->
    627644<?php include( './admin-footer.php' ); ?>