Intereting Posts
meta_query в диапазоне дат, используя массив значений Пользовательские поля с get_post () Как заменить слова в моих сообщениях и сохранить новые слова Как отменить обновления сообщений из измененного плагина Как настроить пользовательский заголовок на один язык? получить php-переменную из функций php и эхо-файл в файлах шаблонов тем Сообщения о навигации в пользовательском почтовом типе single.php не работают 404 Ошибка в пользовательском типе сообщения / пользовательской таксономии Как отслеживать, изменил ли пользователь значение поля в виджетах или нет? Сортировка и фильтрация изображения по тегам или категориям Можно ли безопасно удалить запрещенные имена из WordPress? Можно ли изменить количество сообщений администратора на страницу? Создание HTTPS-адресов в многопользовательском режиме Лучшее решение для управления вложениями мультимедиа с помощью `wp_editor ()`? Форум Open Source для WordPress, аналогичный stackexchange или stackoverflow

WordPress: update_option, не обновлять пустые опции?

Как бы я пошел, не допуская пустые данные в wordpress?

<?php foreach($_POST['eirepanel_inline_ads_options_name'] as $post_eirepanel_inline_ads_options_name): if(empty($post_eirepanel_inline_ads_options_name)): echo 'empty'; else: update_option('eirepanel_inline_ads_options', $_POST); $eirepanel_inline_ads_options = get_option('eirepanel_inline_ads_options'); endif; endforeach; ?> 

Что еще более важно, вы не должны допускать * недоверенные, несаминированные данные $ _POST * в WordPress.

Но я думаю, что проблема заключается в том, что вы обновляете параметр со всеми данными $ _POST, а не с соответствующим ключом массива:

 update_option('eirepanel_inline_ads_options', $_POST); 

Должно быть, должно быть что-то вроде:

 update_option('eirepanel_inline_ads_options', $_POST['eirepanel_inline_ads_options_name']); 

Являются ли ваши параметры плагина дискретными (одна запись БД на каждый параметр) или массив опций?

РЕДАКТИРОВАТЬ

Поскольку вы используете массив опций, правильный подход:

  1. Определите массив для хранения данных $_POST ( $input = array() )
  2. Определите массив для получения текущих настроек из БД ( $valid_input = array() )
  3. $_POST данные $_POST
  4. Обновите массив $valid_data с помощью $valid_data массива $input
  5. Передайте обновленные $valid_data обратно в $valid_data данных

например

 $input = ( isset( $_POST ) ? $_POST : false ); $valid_input = get_option( 'eirepanel_inline_ads_options' ); foreach ( $input as $key ) { // sanitize data here } $valid_input = array_merge( $valid_input, $input ); update_option( 'eirepanel_inline_ads_options', $valid_input ); 

Просто быстро и грязно, но должно дать вам представление.

Кроме того: использование API настроек было бы особенно полезно здесь.

Следуя от вашего ответа на предложения @ Chip, я бы посоветовал вам назвать ваши входы таким образом;

 <input type="text" name="eire[option_key_name]" value="hello world" /> <input type="text" name="eire[option_key_another]" /> <input type="text" name="eire[nasty_key_possibility]" /> 

Затем в вашем коде;

 $options = shortcode_atts( array( 'option_key_name' => 'default value', 'option_key_another' => 'foobar' ), ( array ) $_POST['eire'] ); 

$options теперь будут содержать только явные ключи, переданные shortcode_atts() , причем данные из $_POST переопределяют значения по умолчанию.

 Array ( option_key_name => hello world, option_key_another' => foobar ) 

Вы увидите, что я использую имена входных массивов , чтобы пространство имен $_POST ваши данные $_POST (в отличие от namespacing каждого имени ввода опций, а затем перебирать их и удалять перед сохранением).

Примечание. Это позволяет удалять только те ключи, которые нам не нужны . Вероятно, вам захочется идти дальше и дезинфицировать отдельные значения в зависимости от их типа данных. Если они все одинаковые, вы можете сопоставить обратный вызов с массивом и сделать с ним.

Например, это все текстовые поля;

 $options = array_map( 'wp_strip_all_tags', $options );