2014-01-06 100 views
0

我正在嘗試爲woocommerce產品創建自己的wordpress小部件插件。所以我有一些編碼,但堅持存儲檢查/選擇的類別的問題。如何在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的所有產品類別,但是當我檢查了一些類別和保存......它不工作:(

好心幫我傢伙

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

SOLUTION

我只是想和它現在的工作很好!

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 
} 

我用foreach循環用於驗證...,還可以定義變量的陣列

$ select_product_categories =(數組)$實例[ 'select_product_categories'];

+0

你如何保存數據庫中的值?如果您無法確定複選框是否已被選中,您有兩種可能的解決方案:1 /'$ _POST ['x']'被設置,當且僅當複選框「x」已被選中。 2 /爲每個名爲'x'的複選框添加一個'hidden'字段,該字段也被命名爲'x',其默認值爲。如果複選框'x'沒有被選中,那麼你將在$ _POST ['x']'中得到默認值。 – Martin

+0

抱歉說!但我不明白! –

回答

0

我不知道我明白你的問題是什麼。

如果你的問題是,你有哪些複選框被選中很難找到了,哪一個都沒有,這裏有兩種解決方案:

1解決方法:使用isset()

說,在您的形式你有這樣的複選框:

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

一旦提交後,在你的PHP代碼,你可以這樣做:

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

如果用戶選中複選框check1,變量$checked將爲真。 (請注意,這並不意味着它的值是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 ! 

如果用戶沒有選中複選框check2,並且等於value2,那麼您可以在您的PHP代碼中訪問$_POST['check2'],這將等於default value

請注意,即使使用第二種解決方案,$_POST['check2']也可能未定義。 永遠不要相信你的投入。

相關問題