如何在wordpress小部件中创建多个复选框

时间:2014-01-06 21:36:14

标签: php wordpress

我正在尝试为woocommerce产品创建自己的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
}

我使用foreach循环验证...并且还将变量定义为数组

$ select_product_categories =(array)$ instance ['select_product_categories'];

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题。

如果您遇到问题是您无法找到已选中的复选框,以及哪些复选框没有,则以下是两个解决方案:

第一个解决方案:使用isset()

在表格中说明你有这个复选框:

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

提交表单后,在PHP代码中,您可以执行以下操作:

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

如果用户选中了复选框$checked,则变量check1将为true。 (注意,这并不意味着它的值是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']永远不要相信您的意见。