2016-09-01 2 views
0

Я строю простой формыCheckbox не может хранить несколько значение

template.php

<div class="form-group relocate"> 
    <label for="contact_method"><?php _e('Best Contact Method', 'jobboard') ?></label> 
    <?php 
     $contact_method = get_post_meta($resume_id, 'resume_contact_method', false); 
     // $contact_method = explode(',', $contact_method); 
     var_dump($contact_method); 
    ?> 
    <ul> 
     <li class="checkbox-inline"> 
      <input type="checkbox" id="resume_contact_method" name="resume_contact_method[]" value="email" <?php if($contact_method){echo (in_array('email', $contact_method)) ? 'checked="checked"' : ''; } ?>><label for="resume_contact_method_email"><?php _e('Email', 'jobboard'); ?></label> 
     </li> 
     <li class="checkbox-inline"> 
      <input type="checkbox" id="resume_contact_method" name="resume_contact_method[]" value="phone" <?php if($contact_method){echo (in_array('phone', $contact_method)) ? 'checked="checked"' : ''; } ?>><label for="resume_contact_method_phone"><?php _e('Phone', 'jobboard'); ?></label> 
     </li> 

    </ul> 
</div> 

function.php

for($i=0; $i<sizeof($_POST['resume_contact_method']); $i++){ 
    update_post_meta($resume_id, 'resume_contact_method', $_POST['resume_contact_method'][$i]); 
} 

Мой код вопрос, если г попробуйте сохранить данные, установите флажок, чтобы сохранить последние данные. Может ли кто-нибудь сказать мне, где я совершил ошибку?

+0

проверки этого: http://stackoverflow.com/questions/3626883/what -is-the-the-the-the-name-attribute-in-a-checkbox-input-element –

+0

1. У вас не может быть одинакового идентификатора для нескольких элементов ... Идентификаторы уникальны для каждого элемента. 2. Измените имя на 'name =" resume_contact_id "' (удаление флажка '[]', не обязательно на флажках, как вы его используете). –

+0

@MagnusEriksson Он по-прежнему сохраняет только последний щелчок, не может сохранить несколько данных. –

ответ

0

Вместо использования update_post_meta. Используйте delete_post_meta и add_post_meta.

if (!empty($_POST['resume_contact_method']) && is_array($_POST['resume_contact_method'])) { 
    delete_post_meta($resume_id, 'resume_contact_method'); 
    foreach ($_POST['resume_contact_method'] as $resume_contact_method_kv) { 
     add_post_meta($resume_id, 'resume_contact_method', $resume_contact_method_kv); 
    } 
} 

См здесь рабочий пример с более подробной информации о хранении нескольких значений под одним мета ключевых рекомендуемого образом:

https://wordpress.stackexchange.com/questions/10821/how-to-store-multiple-input-values-with-same-meta-key

+0

Не дал бы ему те же результаты, что и при использовании 'update_post_meta ($ resume_id, $ _POST ['resume_contact_method']), но в этом случае, используя три DB-запроса (одно удаление и две вставки) вместо одного (Обновить)? –

+0

Да, это работает наилучшим образом – Senthil

+0

Вы имеете в виду 'update_post_meta ($ resume_id, $ _POST ['resume_contact_method'])' работает лучше, чем удаление и добавление? –

Смежные вопросы