customize-controls.js – расширение api.previewer

Я хочу удалить эту проверку -> if ( value._dirty ) из фрагмента кода ниже, но поскольку она находится в основном файле WordPress (customize-controls.js line 1919)

Я не могу редактировать это, мне нужно выполнить это из пользовательского js-файла моей темы, но я не знаю, как, как я полагаю, он должен быть расширен и установлен в очередь. код:

  // Initialize Previewer api.previewer = new api.Previewer({ container: '#customize-preview', form: '#customize-controls', previewUrl: api.settings.url.preview, allowedUrls: api.settings.url.allowed, signature: 'WP_CUSTOMIZER_SIGNATURE' }, { nonce: api.settings.nonce, query: function() { var dirtyCustomized = {}; api.each( function ( value, key ) { if ( value._dirty ) { dirtyCustomized[ key ] = value(); } } ); return { wp_customize: 'on', theme: api.settings.theme.stylesheet, customized: JSON.stringify( dirtyCustomized ), nonce: this.nonce.preview }; }, save: function() { var self = this, query = $.extend( this.query(), { action: 'customize_save', nonce: this.nonce.save } ), processing = api.state( 'processing' ), submitWhenDoneProcessing, submit; body.addClass( 'saving' ); submit = function () { var request = $.post( api.settings.url.ajax, query ); api.trigger( 'save', request ); request.always( function () { body.removeClass( 'saving' ); } ); request.done( function( response ) { // Check if the user is logged out. if ( '0' === response ) { self.preview.iframe.hide(); self.login().done( function() { self.save(); self.preview.iframe.show(); } ); return; } // Check for cheaters. if ( '-1' === response ) { self.cheatin(); return; } // Clear setting dirty states api.each( function ( value ) { value._dirty = false; } ); api.trigger( 'saved' ); } ); }; if ( 0 === processing() ) { submit(); } else { submitWhenDoneProcessing = function () { if ( 0 === processing() ) { api.state.unbind( 'change', submitWhenDoneProcessing ); submit(); } }; api.state.bind( 'change', submitWhenDoneProcessing ); } } }); 

Из вашего комментария, я думаю, вы ошибаетесь в этой концепции. Вы хотите сохранить параметры темы после первой активации. Активировать тему не означает, что пользователь будет использовать настройку темы, поэтому я думаю, что нет никакого отношения к javascript-customizer, потому что он будет загружен, только если пользователь перейдет на экран настройки и потому что это код на стороне клиента , Есть лучшие способы.

Мое предложение состоит в том, чтобы использовать команды after_switch_theme и switch_theme :

  • after_switch_theme чтобы сохранить параметры темы после активации темы.
  • switch_theme чтобы удалить параметры темы, если тема деактивирована (необязательно)

Пример:

 add_action("after_switch_theme", "cyb_save_theme_options_on_activation"); function cyb_save_theme_options_on_activation() { set_theme_mod('background-color', '#FFF'); } 

Я думаю, было бы неплохо проверить, имеет ли добавленный / обновляемый параметр пользовательское значение пользователя; если это так, я думаю, что его нельзя менять. Например:

 add_action("after_switch_theme", "cyb_save_theme_options_on_activation"); function cyb_save_theme_options_on_activation() { if( get_theme_mod('background-color') == '' ) { set_theme_mod('background-color', '#FFF'); } } 

Если вы используете параметры темы вместо модов темы:

 add_action("after_switch_theme", "cyb_save_theme_options_on_activation"); function cyb_save_theme_options_on_activation() { //add_option adds the option if it doesn't exist in the database //Use update_option if you want to override existing option in the database or add it if doesn't exist add_option('background-color', '#FFF'); } 

Я все еще думаю, что вы ошибаетесь в этом подходе. Из вашего комментария вы хотите сохранить все параметры в базе данных, даже параметры со значениями по умолчанию, когда вы используете «Сохранить и опубликовать», а не активировать тему. Для этого вы можете использовать customize_save_after action hook:

 add_action( 'customize_save_after', 'customize_save_after' ); function customize_save_after( $wp_customize ) { //Save the theme options here }