diff --git src/wp-admin/js/customize-controls.js src/wp-admin/js/customize-controls.js
index f43630a..7c4a631 100644
|
|
|
|
| 1945 | 1945 | save: function() { |
| 1946 | 1946 | var self = this, |
| 1947 | 1947 | query = $.extend( this.query(), { |
| 1948 | | action: 'customize_save', |
| 1949 | 1948 | nonce: this.nonce.save |
| 1950 | 1949 | } ), |
| 1951 | 1950 | processing = api.state( 'processing' ), |
| … |
… |
|
| 1955 | 1954 | body.addClass( 'saving' ); |
| 1956 | 1955 | |
| 1957 | 1956 | submit = function () { |
| 1958 | | var request = $.post( api.settings.url.ajax, query ); |
| | 1957 | var request = wp.ajax.post( 'customize_save', query ); |
| 1959 | 1958 | |
| 1960 | 1959 | api.trigger( 'save', request ); |
| 1961 | 1960 | |
| … |
… |
|
| 1963 | 1962 | body.removeClass( 'saving' ); |
| 1964 | 1963 | } ); |
| 1965 | 1964 | |
| 1966 | | request.done( function( response ) { |
| 1967 | | // Check if the user is logged out. |
| | 1965 | request.fail( function ( response ) { |
| 1968 | 1966 | if ( '0' === response ) { |
| | 1967 | response = 'not_logged_in'; |
| | 1968 | } else if ( '-1' === response ) { |
| | 1969 | // Back-compat in case any other check_ajax_referer() call is dying |
| | 1970 | response = 'invalid_nonce'; |
| | 1971 | } |
| | 1972 | |
| | 1973 | if ( 'invalid_nonce' === response ) { |
| | 1974 | self.cheatin(); |
| | 1975 | } else if ( 'not_logged_in' === response ) { |
| 1969 | 1976 | self.preview.iframe.hide(); |
| 1970 | 1977 | self.login().done( function() { |
| 1971 | 1978 | self.save(); |
| 1972 | 1979 | self.preview.iframe.show(); |
| 1973 | 1980 | } ); |
| 1974 | | return; |
| 1975 | | } |
| 1976 | | |
| 1977 | | // Check for cheaters. |
| 1978 | | if ( '-1' === response ) { |
| 1979 | | self.cheatin(); |
| 1980 | | return; |
| 1981 | 1981 | } |
| | 1982 | api.trigger( 'error', response ); |
| | 1983 | } ); |
| 1982 | 1984 | |
| | 1985 | request.done( function( response ) { |
| 1983 | 1986 | // Clear setting dirty states |
| 1984 | 1987 | api.each( function ( value ) { |
| 1985 | 1988 | value._dirty = false; |
| 1986 | 1989 | } ); |
| 1987 | | api.trigger( 'saved' ); |
| | 1990 | |
| | 1991 | api.trigger( 'saved', response ); |
| 1988 | 1992 | } ); |
| 1989 | 1993 | }; |
| 1990 | 1994 | |
diff --git src/wp-includes/class-wp-customize-manager.php src/wp-includes/class-wp-customize-manager.php
index 60303e6..58e8c0f 100644
|
|
|
final class WP_Customize_Manager {
|
| 628 | 628 | * @since 3.4.0 |
| 629 | 629 | */ |
| 630 | 630 | public function save() { |
| 631 | | if ( ! $this->is_preview() ) |
| 632 | | die; |
| | 631 | if ( ! $this->is_preview() ) { |
| | 632 | wp_send_json_error( 'not_preview' ); |
| | 633 | } |
| 633 | 634 | |
| 634 | | check_ajax_referer( 'save-customize_' . $this->get_stylesheet(), 'nonce' ); |
| | 635 | $action = 'save-customize_' . $this->get_stylesheet(); |
| | 636 | if ( ! check_ajax_referer( $action, 'nonce', false ) ) { |
| | 637 | wp_send_json_error( 'invalid_nonce' ); |
| | 638 | } |
| 635 | 639 | |
| 636 | 640 | // Do we have to switch themes? |
| 637 | 641 | if ( ! $this->is_theme_active() ) { |
| … |
… |
final class WP_Customize_Manager {
|
| 666 | 670 | */ |
| 667 | 671 | do_action( 'customize_save_after', $this ); |
| 668 | 672 | |
| 669 | | die; |
| | 673 | /** |
| | 674 | * Filter response data for customize_save Ajax request. |
| | 675 | * |
| | 676 | * @since 4.2.0 |
| | 677 | * |
| | 678 | * @param array $data |
| | 679 | * @param WP_Customize_Manager $this WP_Customize_Manager instance. |
| | 680 | */ |
| | 681 | $response = apply_filters( 'wp_customize_save_response', array(), $this ); |
| | 682 | wp_send_json_success( $response ); |
| 670 | 683 | } |
| 671 | 684 | |
| 672 | 685 | /** |