Крючки для просмотра изменения значения настройки

Я хочу посмотреть настройку customizer, чтобы при изменении его значения он обновлял значение другого поля (все хранятся в параметрах «option», а не в стиле темы).

  • Поле настройки: header_style
  • Когда header_style изменен, я хочу автоматически изменить значение header_nav_type.

Примечание: только PHP-решение, так как я ищу крючок. Я уже понял, как это сделать, используя JS API. Однако, чтобы держать вещи сухими, я должен сделать это на стороне PHP.

Solutions Collecting From Web of "Крючки для просмотра изменения значения настройки"

Это очень легко сделать. То, что вы хотите сделать, – это подключиться к клику customize_save_after – https://developer.wordpress.org/reference/hooks/customize_save_after/ – и проверить свои настройки и на его основе обновить другое. Пример:

add_action( 'customize_save_after', function() { // Get the setting you want to retrieve value from $new_value_setting_1 = get_theme_mod( 'SETTING_ID' ); // Update another setting if ( $new_value_setting_1 ) { set_theme_mod( 'SETTING_ID', $new_value_setting_1 ); } // Delete theme mod if setting is empty rather then storing an empty value else { remove_theme_mod( 'SETTING_ID', $new_value_setting_1 ); } } ); 

Поэтому всякий раз, когда изменяются настройки настройки, изменяется другая настройка. К сожалению, сделать это в Настройщике, когда изменение параметра будет невозможно без JS (из того, что я знаю), если вы хотите сделать это с PHP, вы должны подключиться к customize_save_after.

То есть, если … если параметр, который вы проверяете, использует метод refresh, поэтому, когда он изменен, окно Customizer обновляется, тогда вы можете подключиться к init, чтобы изменить значение. Например:

 add_action( 'init', function() { // Only needed in the customizer if ( ! is_customize_preview() ) { return; } // Get the setting you want to retrieve value from $new_value_setting_1 = get_theme_mod( 'SETTING_ID' ); // Update another setting if ( $new_value_setting_1 ) { set_theme_mod( 'SETTING_ID', $new_value_setting_1 ); } // Delete theme mod if setting is empty rather then storing an empty value else { remove_theme_mod( 'SETTING_ID', $new_value_setting_1 ); } } ); 

Надеюсь, это поможет!