Intereting Posts
Постоянная ссылка для страниц после добавления правила перезаписи Определить ширину изображенных эскизов изображений, а также сделать отзывчивым? wpautop на разделе Как правильно восстановить исходные данные Как увеличить лимит символов для почтового имени 200? Можем ли мы создать настраиваемый шаблон публикации для определенного шаблона страницы Как отредактировать ссылку «<- старше» на странице архива в теме Blankslate? Поддомены Wordrpess (многосайтовые) без подстановочных знаков Отключить виджеты в настройке для боковой панели Как переустановить бесплатный сайт WordPress на другой IP-адрес? tag__in не возвращает сообщения глобальный $ post внутри запроса плагина помещает каждую новую страницу сообщения в wp-admin Пользовательский URL-адрес переписывается с помощью add_rewrite_rule Quicktags на все текстовое поле .. Не работает над плагином? Стиль подписи в WordPress в RSS

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 );