我正在尝试为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'];
答案 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']
。 永远不要相信您的意见。