Intereting Posts
Фильтры категории WordPress как подкатегории Определить страницу Woocommerce с помощью условных тегов WordPress Требовать переадресацию входа на страницу входа Проблема с jQuery в почтовом теле? как размещать функции внутри виджетов Многосетевые таблицы такие же, как и Single Install? навигационная ссылка на основе пользовательского поля Как установить альтернативное значение posts_per_page для запросов по умолчанию в разных шаблонах Создайте пользовательский user_id с альфа-префиксом Невозможно передать переменную на тему cusomizer add_settings () Как работают детские темы? Массив в разделе Pagelines Как добавить новую функцию post в текстовый виджет, который я создал для практики? Автоматически назначать настраиваемую запись для пользовательской таксономии на основе настраиваемого значения поля Тип пользовательской почты wp_query по таксономии и стандартная позиция по таксономии

API настроек – как обновить несколько параметров вручную?

Я сохраняю все свои параметры с помощью API настроек:

function registerSettings() { register_setting('XX_theme_settings', 'XX_theme_settings', 'setting_validate' ); add_settings_section('theme_options', 'Theme Options', 'theme_options_generate', 'page1' ); add_settings_field( 'XX_Option1', 'Option 1', 'text_input', 'page1', 'theme_options', 'XX_Option1' ); add_settings_field( 'XX_Option2', 'Option 2', 'text_input', 'page1', 'theme_options', 'XX_Option2' ); }; add_action('admin_init', 'registerSettings'); 

Предположим, я хочу обновить все параметры вручную (не используя формы, но через PHP), как мне это сделать?

Вот как выглядит это обновление для одного параметра:

 $my_options= get_option('XX_theme_settings');//retrieve all options $my_options['XX_Option2'] = 'my new value'; //amend value in array(s) update_option('XX_theme_settings', $my_options); //update option array 

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

Я пробовал так:

 $current_options = get_option('XX_theme_settings'); $imported_options = array_merge($current_options , array_intersect_key($_POST["import"], $current_options )); // $imported_options = $_POST["import"]; - simplified update_option('XX_theme_settings', $imported_options); 

И это не работает, конечно, «import» – это не строка, а массив.

Вот связанный (мой) вопрос: Настройки API – как обновить параметры вручную?

Думаю, мне все же нужно создать цикл foreach PHP и пропустить все настройки, а затем перечислить их, десять добавить каждый из них через update_option? Как? Было бы медленно, потому что это звучит так?

ОБНОВИТЬ

Этот код, похоже, не обновляет настройки:

 $current_options = get_option( 'XX_theme_settings', array() ); $desired_options = array("existing_field" => "new value"); // $desired_options = array("XX_theme_settings" => array("existing_field" => "new value")); tried this one, but also no luck $merged_options = wp_parse_args( $current_options, $desired_options ); update_option( 'XX_theme_settings', $merged_options ); 

ОБНОВЛЕНИЕ II

Это даже странно.

Я поставил выше код на page.php (только для тестирования):

  $current_options = get_option( 'XX_theme_settings', array() ); $desired_options = array("existing_field" => "new value"); $merged_options = wp_parse_args( $current_options, $desired_options ); update_option( 'XX_theme_settings', $merged_options ); 

Я обновляю одну из страниц. Ничего не произошло. Затем я меняю код на это:

  $current_options = get_option( 'XX_theme_settings', array() ); $desired_options = array("existing_field" => "new value"); $merged_options[] = wp_parse_args( $current_options, $desired_options ); //here's the change update_option( 'XX_theme_settings', $merged_options ); 

Еще одно обновление, «существующее_поле» теперь emtpy.

Затем я снова вставляю первый код и обновляюсь в третий раз, и он работает.

Подсказка: возможно, мне нужно удалить значение полей перед их обновлением?

Solutions Collecting From Web of "API настроек – как обновить несколько параметров вручную?"

  1. Извлеките текущие параметры и обязательно верните массив, если он пуст:

     $current_options = get_option( 'option_name', array() ); 
  2. Убедитесь, что желаемые параметры находятся в массиве:

     $desired_options = array( /* whatever you need goes here */ ); 
  3. Объедините их, используя [wp_parse_args() ] 1 :

     $merged_options = wp_parse_args( $current_options, $desired_options ); 
  4. Обновить

     update_option( 'option_name', $merged_options ); 

Конечно, трюк для вас – это то, что вы имеете дело с массивом с вашими желаемыми параметрами. Может быть, что-то вроде этого:

 $desired_options = array( $_POST['import'] ); 

(PS, пожалуйста, сделайте какую-то дезинфекцию. Данные $_POST по своей сути недостоверны .)

редактировать

У меня около 30 опций, входов, булевых, текстовых полей. Все они хранятся в разделе XX_theme_settings, и один из них называется existing_field

Просто выполните описанный выше процесс:

  1. Извлеките текущие параметры и обязательно верните массив, если он пуст:

     $current_options = get_option( 'XX_theme_settings', array() ); 
  2. Убедитесь, что желаемые параметры находятся в массиве:

     $desired_options = array( 'existing_field' => 'your string here' ); 
  3. Объедините их, используя [wp_parse_args() ] 1 :

     $merged_options = wp_parse_args( $current_options, $desired_options ); 
  4. Обновить

     update_option( 'XX_theme_settings', $merged_options );