WordPress.org

Make WordPress Core

Changeset 35317


Ignore:
Timestamp:
10/21/2015 05:22:52 AM (5 years ago)
Author:
azaozz
Message:

Widgets: add a button to delete all inactive widgets simultaneously for better UX.

Props cdog.
Fixes #19159.

Location:
trunk/src/wp-admin
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/admin-ajax.php

    r34312 r35317  
    5757    'menu-locations-save', 'menu-quick-search', 'meta-box-order', 'get-permalink',
    5858    'sample-permalink', 'inline-save', 'inline-save-tax', 'find_posts', 'widgets-order',
    59     'save-widget', 'set-post-thumbnail', 'date_format', 'time_format',
     59    'save-widget', 'delete-inactive-widgets', 'set-post-thumbnail', 'date_format', 'time_format',
    6060    'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', 'get-attachment',
    6161    'query-attachments', 'save-attachment', 'save-attachment-compat', 'send-link-to-editor',
  • trunk/src/wp-admin/css/widgets.css

    r35015 r35317  
    273273}
    274274
    275 .sidebar-name .spinner {
     275.sidebar-name .spinner,
     276.remove-inactive-widgets .spinner {
    276277    float: none;
    277278    position: relative;
     
    349350.js .widgets-holder-wrap.closed .widget,
    350351.js .widgets-holder-wrap.closed .sidebar-description,
     352.js .widgets-holder-wrap.closed .remove-inactive-widgets,
    351353.js .closed br.clear {
    352354    display: none;
  • trunk/src/wp-admin/includes/ajax-actions.php

    r35168 r35317  
    19351935
    19361936/**
     1937 * Ajax handler for removing inactive widgets.
     1938 *
     1939 * @since 4.4.0
     1940 */
     1941function wp_ajax_delete_inactive_widgets() {
     1942    check_ajax_referer( 'remove-inactive-widgets', 'removeinactivewidgets' );
     1943
     1944    if ( ! current_user_can( 'edit_theme_options' ) ) {
     1945        wp_die( -1 );
     1946    }
     1947
     1948    unset( $_POST['removeinactivewidgets'], $_POST['action'] );
     1949
     1950    do_action( 'load-widgets.php' );
     1951    do_action( 'widgets.php' );
     1952    do_action( 'sidebar_admin_setup' );
     1953
     1954    $sidebars_widgets = wp_get_sidebars_widgets();
     1955
     1956    foreach ( $sidebars_widgets['wp_inactive_widgets'] as $key => $widget_id ) {
     1957        $pieces = explode( '-', $widget_id );
     1958        $multi_number = array_pop( $pieces );
     1959        $id_base = implode( '-', $pieces );
     1960        $widget = get_option( 'widget_' . $id_base );
     1961        unset( $widget[$multi_number] );
     1962        update_option( 'widget_' . $id_base, $widget );
     1963        unset( $sidebars_widgets['wp_inactive_widgets'][$key] );
     1964    }
     1965
     1966    wp_set_sidebars_widgets( $sidebars_widgets );
     1967
     1968    wp_die();
     1969}
     1970
     1971/**
    19371972 * Ajax handler for uploading attachments
    19381973 *
  • trunk/src/wp-admin/js/widgets.js

    r35015 r35317  
    8080                widget.removeClass( 'open' );
    8181                wpWidgets.close( widget );
     82                e.preventDefault();
     83            } else if ( target.attr( 'id' ) === 'inactive-widgets-control-remove' ) {
     84                wpWidgets.removeInactiveWidgets();
    8285                e.preventDefault();
    8386            }
     
    388391
    389392        $.post( ajaxurl, data, function() {
     393            $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length );
    390394            $( '.spinner' ).removeClass( 'is-active' );
    391395        });
     
    432436                } else {
    433437                    widget.remove();
     438
     439                    if ( sidebarId === 'wp_inactive_widgets' ) {
     440                        $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length );
     441                    }
    434442                }
    435443            } else {
     
    439447                    wpWidgets.appendTitle( widget );
    440448                    $document.trigger( 'widget-updated', [ widget ] );
    441                 }
    442             }
     449
     450                    if ( sidebarId === 'wp_inactive_widgets' ) {
     451                        $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length );
     452                    }
     453                }
     454            }
     455
    443456            if ( order ) {
    444457                wpWidgets.saveOrder();
    445458            }
    446459        });
     460    },
     461
     462    removeInactiveWidgets : function() {
     463        var $element = $( '.remove-inactive-widgets' ), a, data;
     464
     465        $( '.spinner', $element ).addClass( 'is-active' );
     466
     467        a = {
     468            action : 'delete-inactive-widgets',
     469            removeinactivewidgets : $( '#_wpnonce_remove_inactive_widgets' ).val()
     470        };
     471
     472        data = $.param( a );
     473
     474        $.post( ajaxurl, data, function() {
     475            $( '#wp_inactive_widgets .widget' ).remove();
     476            $( '#inactive-widgets-control-remove' ).prop( 'disabled' , true );
     477            $( '.spinner', $element ).removeClass( 'is-active' );
     478        } );
    447479    },
    448480
  • trunk/src/wp-admin/widgets.php

    r35102 r35317  
    195195}
    196196
     197// Remove inactive widgets without js
     198if ( isset( $_POST['removeinactivewidgets'] ) ) {
     199    check_admin_referer( 'remove-inactive-widgets', '_wpnonce_remove_inactive_widgets' );
     200
     201    if ( $_POST['removeinactivewidgets'] ) {
     202        foreach ( $sidebars_widgets['wp_inactive_widgets'] as $key => $widget_id ) {
     203            $pieces = explode( '-', $widget_id );
     204            $multi_number = array_pop( $pieces );
     205            $id_base = implode( '-', $pieces );
     206            $widget = get_option( 'widget_' . $id_base );
     207            unset( $widget[$multi_number] );
     208            update_option( 'widget_' . $id_base, $widget );
     209            unset( $sidebars_widgets['wp_inactive_widgets'][$key] );
     210        }
     211
     212        wp_set_sidebars_widgets( $sidebars_widgets );
     213    }
     214
     215    wp_redirect( admin_url( 'widgets.php?message=0' ) );
     216    exit;
     217}
     218
    197219// Output the widget form without js
    198220if ( isset($_GET['editwidget']) && $_GET['editwidget'] ) {
     
    389411            <div class="widget-holder inactive">
    390412                <?php wp_list_widget_controls( $registered_sidebar['id'], $registered_sidebar['name'] ); ?>
    391                 <div class="clear"></div>
     413                <div class="remove-inactive-widgets">
     414                    <form action="" method="post">
     415                        <p>
     416                            <?php
     417                            $attributes = array( 'id' => 'inactive-widgets-control-remove' );
     418
     419                            if ( empty($sidebars_widgets['wp_inactive_widgets']) ) {
     420                                $attributes['disabled'] = '';
     421                            }
     422
     423                            submit_button( __( 'Clear Inactive Widgets' ), 'delete', 'removeinactivewidgets', false, $attributes );
     424                            ?>
     425                            <span class="spinner">
     426                        </p>
     427                        <?php wp_nonce_field( 'remove-inactive-widgets', '_wpnonce_remove_inactive_widgets' ); ?>
     428                    </form>
     429                </div>
    392430            </div>
     431            <p class="description"><?php _e( 'This will clear all items from the inactive widgets list. You will not be able to restore any customizations.' ); ?></p>
    393432        </div>
    394433        <?php
Note: See TracChangeset for help on using the changeset viewer.