Точка "." в значении опции вызывает проблемы при сохранении настроек
Ниже приведена процедура сохранения настроек моей темы. Я обнаружил, что если $value['id'], передаваемый из массива опций, содержит точку, данные не передаются, и настройки перестают работать на этом месте. Стоит ли мне выбрать другой символ или есть обходное решение для использования точки в имени опции?
Например, это работает нормально:
"id" => "myTheme_color|sidebar",
но это не работает (значение не передается):
"id" => "myTheme_color.sidebar",
Функция сохранения:
function mytheme_add_admin(){
global $themename, $shortname, $options;
if ( $_GET['page'] == basename(__FILE__) )
{
if ( 'save' == $_REQUEST['action'] )
{
foreach ($options as $value)
{
update_option( $value['id'], stripslashes($_REQUEST[$value['id']]) );
}
foreach ($options as $value)
{
if( isset( $_REQUEST[ $value['id'] ] ) )
{
update_option( $value['id'], stripslashes($_REQUEST[ $value['id'] ]) );
echo $value['id'].": ".$_REQUEST[$value['id']]."<br>";
echo $value['id'].": ".stripslashes($_REQUEST[$value['id']])."<br>";
}
}
}
}

Точки и пробелы в индексах массивов через POST и GET заменяются PHP. Это может быть причиной вашей проблемы.

Я не уверен, в чем именно проблема, этот тестовый код у меня работает нормально:
$options = array( 'test_option' => array('id' => 'myTheme_color.sidebar') );
$test = 'test';
var_dump($options);
foreach ($options as $value) {
var_dump($value['id']);
update_option( $value['id'], $test );
}
Если бегло взглянуть на исходный код, наиболее вероятная причина, по которой update_option
может завершиться неудачей - это ошибка SQL-запроса при вставке данных.
Мои рекомендации: выполнить $wpdb->print_error()
после операции для проверки на ошибки запроса и подключиться к действиям update_option_{$option}
и updated_option
, чтобы проверить их срабатывание (источник).
