Здравствуйте.
Это не проблема плагина, а кастомизация. В той ветке где вы разместили свою тему обсуждаем использование плагина без вмешательство в его работу. Т.е. проблемы в базовом функционале.
Перенесено.
Уменьшайте код до одного чекбокса. Проверяйте - сохраняется ли. И приводите весь код здесь, если есть проблема
Даже один 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
Спасибо большое за помощь! Заработало!)