10 ответ(ов) в теме
romka.roman
не в сети 6 часов
На сайте с 22.06.2018
Участник
Тем 5
Сообщения 13
1
13:50

Версия WP-Recall: 16.15.5

Здравствуйте. Вот делаю дочерние вкладки по этому мануалу.

Вы не можете просматривать опубликованные ссылки

На одной из сабвкладок у меня выводиться checkbox'си (их количество примерно 15 штук), и после нажатия кнопки "сохранить данные", сохранение не происходит.

0
Otshelnik-Fm
не в сети 13 часов
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 11066
2
14:16

Здравствуйте.

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

Перенесено.

Уменьшайте код до одного чекбокса. Проверяйте - сохраняется ли. И приводите весь код здесь, если есть проблема

1
romka.roman
не в сети 6 часов
На сайте с 22.06.2018
Участник
Тем 5
Сообщения 13
3
14:21

Даже один 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;
}

Редакции сообщения
04.07.2018 14:22romka.romanПричина: не указано
04.07.2018 14:23romka.romanПричина: не указано
0
Otshelnik-Fm
не в сети 13 часов
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 11066
4
17:28

Проверил - действительно - чекбоксы не проходят и не сохраняются. Текстареа - сохраняются без проблем. Тот пример из статьи вообще полностью рабочий - но когда вписываешь чекбокс - хрустальный замок рущится.

Докопаться до истины не смог. Но увидел что в файле: 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;
}

и данные из чекбокса у меня сохранились. Но при этом поломалось сохранение чекбоксов из самого профиля. Так что собака зарыта - но где?

Попрошу Андрея глянуть эту тему - т.к. я не осилил

1
romka.roman
не в сети 6 часов
На сайте с 22.06.2018
Участник
Тем 5
Сообщения 13
5
17:38

Спасибо большое что откликнулись) Надеюсь что решить проблему удастся)

0
Андрей CS
не в сети 7 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 9976
6
18:06

в БД, в таблице wp_usermeta данные в метаполе os_type_work за юзером сохраняются?

1
romka.roman
не в сети 6 часов
На сайте с 22.06.2018
Участник
Тем 5
Сообщения 13
7
18:25

Андрей CS сказал(а)
в БД, в таблице wp_usermeta данные в метаполе os_type_work за юзером сохраняются?

Нет, не сохраняются.

0
Андрей CS
не в сети 7 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 9976
8
18:28

пробуйте привести массив значений к виду

array(
   __('Чекбокс') => __('Чекбокс'),
   __('Еще один') => __('Еще один'),
   __('Второй') => __('Второй'),
   __('Третий') => __('Третий'),
   __('Еще второй') => __('Еще второй'),
   __('Еще третий') => __('Еще третий')
)

а еще лучше, дополните массив поля значением:

'value_in_key' => true

2
romka.roman
не в сети 6 часов
На сайте с 22.06.2018
Участник
Тем 5
Сообщения 13
9
18:40

Андрей CS сказал(а)
пробуйте привести массив значений к виду

array(
   __('Чекбокс') => __('Чекбокс'),
   __('Еще один') => __('Еще один'),
   __('Второй') => __('Второй'),
   __('Третий') => __('Третий'),
   __('Еще второй') => __('Еще второй'),
   __('Еще третий') => __('Еще третий')
)

а еще лучше, дополните массив поля значением:

'value_in_key' => true

Спасибо большое за помощь! Заработало!)

0
romka.roman
не в сети 6 часов
На сайте с 22.06.2018
Участник
Тем 5
Сообщения 13
10
18:45

multiselect надо делать таким же образом. Только что проверил.

0
Вы не имеете права на публикацию сообщений в этой теме