2014-01-06 2 views
0

Я пытаюсь создать свой собственный плагин виджета Wordpress для продуктов woocommerce. поэтому у меня была некоторая кодировка, но я придерживался вопроса о сохранении выбранных/выбранных категорий.Как создать несколько флажков в widget Wordpress

public function form($instance) { 
    $instance = wp_parse_args((array) $instance, array('title' => '', 'select_product_categories' => '')); 

    $args = array('orderby' => 'name', 'order' => 'ASC', 'hide_empty' => true); 
    $show_pcategories = get_terms('product_cat', $args); 

    $title = strip_tags($instance['title']);    
    $select_product_categories = $instance['select_product_categories']; 

    <?php /* Select Categories Checkbox to display */ ?> 
    <p><label for="<?php echo $this->get_field_id('select_product_categories'); ?>">Select Product Category to display:</label><br> 
    <?php      
     foreach($show_pcategories as $category) { 
     ?> 
      <label for="<?php echo $this->get_field_id('select_product_categories') . $category->term_id; ?>"><input id="<?php echo $this->get_field_id('select_product_categories') . $category->term_id; ?>" name="<?php echo $this->get_field_name('select_product_categories'); ?>[]" type="checkbox" value="<?php echo $category->name; ?>" <?php checked('1', $category->name); ?> /><?php echo $category->name; ?></label><br> 
     <?php 
     } 
} 

его извлечения всех категорий продуктов из WooCommerce, но когда я проверить некоторые категории и экономии ... ее не работает :(

любезно помочь мне ребята

======== =============================

РЕШЕНИЕ

я просто попытался, и теперь он работает отлично!

foreach($show_pcategories as $category) { 
?> 
    <label><input id="<?php echo $this->get_field_id('select_product_categories') . $category->term_id; ?>" name="<?php echo $this->get_field_name('select_product_categories'); ?>[]" type="checkbox" value="<?php echo $category->term_id; ?>" <?php foreach ($select_product_categories as $checked) { checked($checked, $category->term_id, true); } ?>><?php echo $category->name; ?></label><br> 
<?php 
} 

Я использовал цикл по каждому элементу для проверки ... а также определить переменную массив

$ select_product_categories = (массив) $ экземпляр [ 'select_product_categories'];

+0

Как вы сохраняете значения в БД? Если у вас возникли проблемы с проверкой наличия флажка или нет, у вас есть два возможных решения: 1/'$ _POST ['x']' устанавливается тогда и только тогда, когда установлен флажок 'x'. 2/для каждого флажка с именем 'x' вы добавляете поле' hidden', также называемое 'x' со значением по умолчанию. Если флажок 'x' не был проверен, вы получите значение по умолчанию в' $ _POST ['x'] '. – Martin

+0

извините, пожалуйста! но я не понимаю! –

ответ

0

Я не уверен, что я понимаю, в чем проблема.

Если проблема заключается в том, что у вас есть проблемы с поиском, какие были проверены флажки, и который один нет, здесь есть два решения:

первое решение: Используй isset()

Say в вашей форме у вас есть этот флажок:

<input type="checkbox" name="check1" value="value1" /> Check me ! 

После того как форма была отправлена, в вашем PHP коде, вы можете сделать:

$checked = isset($_POST['check1']) 

Переменная $checked будет действительна, если пользователь установил флажок check1. (Осторожно, это не означает, что его значение value1)

Если пользователь не проверил флажок check1, то делать var_dump($_POST['check1']) сообщит об ошибке undefined index: $_POST['check1'] не существует.

второе решение: Добавить hidden поле

Вы можете также добавить hidden поле с именем так же, как ваш флажок, который будет выступать в качестве значения по умолчанию:

<input type="hidden" name="check2" value="default value" /> 
<input type="checkbox" name="check2" value="value2" /> Check me ! 

После того, как форма была вы можете получить доступ в своем PHP-коде до $_POST['check2'], который будет равен default value, если пользователь не установил флажок check2 и равен value2, если он его проверил.

Обратите внимание, что даже при втором решении $_POST['check2'] не может быть определен. Не доверяйте своим входам.

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