Здравствуйте.
Это не проблема плагина, а кастомизация. В той ветке где вы разместили свою тему обсуждаем использование плагина без вмешательство в его работу. Т.е. проблемы в базовом функционале.
Перенесено.
Уменьшайте код до одного чекбокса. Проверяйте - сохраняется ли. И приводите весь код здесь, если есть проблема
Даже один chackbox не сохраняет.
Привожу код -
add_action('wp','update_setting_tabs_3');
function update_setting_tabs_3(){
global $user_ID;
if(!isset($_POST['action']) || $_POST['action'] != 'update_setting_tabs_3') return false;
//если идет запрос с update_master_data, то
//получаем текущие поля формы
$fields = get_setting_tabs_3();
//передаем их в функцию сохранения полей
//профиля для указанного пользователя
rcl_update_profile_fields($user_ID, $fields);
}-
function get_setting_tabs_3(){
$fields = array(
array(
'type' => 'checkbox',
'slug' => 'os_type_work',
'title' => __('','wp-recall'),
'required' => 0,
'values' => array(
__('Чекбокс'),
__('Еще один'),
__('Второй'),
__('Третий'),
__('Еще второй'),
__('Еще третий')
)
)
);
return $fields;
}
-
function setting_tabs_3($master_id){
global $user_ID;
//получаем все поля формы
$fields = get_setting_tabs_3();
//указываем для полей текущие значения метаданных пользователя
foreach($fields as $k => $field){
$fields[$k]['default'] = get_user_meta($master_id, $field['slug'], 1);
}
$CF = new Rcl_Custom_Fields();
$content = '<div class="master-data">';
if($user_ID == $master_id){
//если хозяин кабинета, то выводим форму для заполнения
$content .= '<form method="post" class="rcl-form">';
foreach($fields as $field){
$required = ($field['required'] == 1)? '<span class="required">*</span>': '';
$content .= '<label>'.$CF->get_title($field).' '.$required.'</label>';
$content .= $CF->get_input($field);
}
$content .= '<div class="submit-box">';
$content .= '<input type="submit" class="recall-button" value="'.__('Сохранить данные 3').'">';
$content .= '</div>';
$content .= '<input type="hidden" name="action" value="update_setting_tabs_3">';
$content .= '</form>';
}
$content .= '</div>';
return $content;
}
Проверил - действительно - чекбоксы не проходят и не сохраняются. Текстареа - сохраняются без проблем. Тот пример из статьи вообще полностью рабочий - но когда вписываешь чекбокс - хрустальный замок рущится.
Докопаться до истины не смог. Но увидел что в файле: plugins/wp-recall/rcl-functions.php
на 1087 строке внутри цикла
foreach($value as $val){
if(in_array($val,$field['values']))
$vals[] = $val;
}значение
$val нет в массиве.
я перед проверкой вставил так: $vals[] = $val; и таким образом чекбоксы сохранились в метаполя юзера
Но это всего лишь дебаг - чтоб проверить что действительно в проверке in_array все стопорится.
Теперь дебаг:
foreach($value as $val){
vda($val);
vda($field['values']);
if(in_array($val,$field['values'])) {
$vals[] = $val;
}
}
Вот что я получил:
В итоге я поменял
foreach($value as $val){
if(array_key_exists($val,$field['values']))
$vals[] = $val;
}
и данные из чекбокса у меня сохранились. Но при этом поломалось сохранение чекбоксов из самого профиля. Так что собака зарыта - но где?
Попрошу Андрея глянуть эту тему - т.к. я не осилил
пробуйте привести массив значений к виду
array(
__('Чекбокс') => __('Чекбокс'),
__('Еще один') => __('Еще один'),
__('Второй') => __('Второй'),
__('Третий') => __('Третий'),
__('Еще второй') => __('Еще второй'),
__('Еще третий') => __('Еще третий')
)
а еще лучше, дополните массив поля значением:
'value_in_key' => true
Андрей CS сказал(а)
пробуйте привести массив значений к видуarray( __('Чекбокс') => __('Чекбокс'), __('Еще один') => __('Еще один'), __('Второй') => __('Второй'), __('Третий') => __('Третий'), __('Еще второй') => __('Еще второй'), __('Еще третий') => __('Еще третий') )а еще лучше, дополните массив поля значением:
'value_in_key' => true
Спасибо большое за помощь! Заработало!)