我创建了一个具有自己类别的自定义帖子类型。我想将自定义帖子类型的类别链接到WooCommerce产品。例如该产品属于织物盖类别。我在后端的Woocommerce产品中显示了这些类别。我用getterm做到这一点。到目前为止,一切正常。然后,我在每个类别的前面创建了一个复选框字段。当我保存内容时,所有类别都存储在数组中(无论是否选择)。我只想保存我选择的类别。我在做什么错了?
如何将所选复选框的数组保存在metabox(pro_in_cat_fields)中。目前,所有值均已保存。如果仅选中一个复选框(例如,fabric cover1),则仅需要保存该复选框的同一数组中的值。不是布料1,布料2,...等的值
<?php
add_action('admin_init', 'add_pro_in_cat_boxes', 1);
function add_pro_in_cat_boxes() {
add_meta_box( 'pro_in_cat-fields', 'Save product in custom category', 'pro_in_cat_meta_box_display', 'product', 'normal', 'low');
}
function pro_in_cat_meta_box_display() {
global $post;
$pro_in_cat_fields = get_post_meta($post->ID, 'pro_in_cat_fields', true);
wp_nonce_field( 'pro_in_cat_meta_box_nonce', 'pro_in_cat_meta_box_nonce' );
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
$('.pro_in_cat_submit').click(function(e) {
e.preventDefault();
$('#publish').click();
});
});
</script>
<table id="pro_in_cat-fieldset-one" width="100%">
<thead>
<tr>
<th width="30%"></th>
<th width="70%"></th>
</tr>
</thead>
<tbody>
<?php
$stoffcat_parent= get_terms( 'cover_cat', array( 'hide_empty' => false, 'parent' => 0 ) );
if ( $stoffcat_parent ) :
foreach( $stoffcat_parent as $parent_term ) {
echo $parent_term->name . '<br>';
$stoffcat_value = get_terms( 'cover_cat', array( 'hide_empty' => false, 'parent' => $parent_term->term_id ) );
foreach( $stoffcat_value as $child_term ) {
?>
<tr>
<td>
<input type="checkbox" class="widefat" name="pro_in_cat_status[]" value="<?php echo $checked; ?>" />
<input type="text" class="widefat" name="pro_in_cat_name[]" value="<?php if($child_term->name != '') echo esc_attr( $child_term->name ); ?>" /></td>
<td><input type="text" class="widefat" name="pro_in_cat_termid[]" value="<?php if($child_term->term_id != '') echo esc_attr( $child_term->term_id ); ?>" />
<input type="text" class="widefat" name="pro_in_cat_slug[]" value="<?php if($child_term->slug != '') echo esc_attr( $child_term->slug); ?>" /></td>
</tr>
<?php
}
}
else :
// show a blank one
?>
<tr>
<td><input type="checkbox" class="widefat" name="pro_in_cat_status[]" />
<input type="text" class="widefat" name="pro_in_cat_name[]" /></td>
<td><input type="text" class="widefat" name="pro_in_cat_termid[]" /><input type="text" class="widefat" name="pro_in_cat_slug[]" /></td>
</tr>
<?php endif; ?>
</tbody>
</table>
<p>
<input type="submit" class="pro_in_cat_submit" value="Save" />
</p>
<?php
}
add_action('save_post', 'pro_in_cat_meta_box_save');
function pro_in_cat_meta_box_save($post_id) {
if ( ! isset( $_POST['pro_in_cat_meta_box_nonce'] ) ||
! wp_verify_nonce( $_POST['pro_in_cat_meta_box_nonce'], 'pro_in_cat_meta_box_nonce' ) )
return;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return;
if (!current_user_can('edit_post', $post_id))
return;
$pro_in_catold = get_post_meta($post_id, 'pro_in_cat_fields', true);
$pro_in_catnew = array();
$pro_in_catstatus = $_POST['pro_in_cat_status'];
$pro_in_catnames = $_POST['pro_in_cat_name'];
$pro_in_cattermid = $_POST['pro_in_cat_termid'];
$pro_in_catslug = $_POST['pro_in_cat_slug'];
$count = count( $pro_in_catnames );
for ( $i = 0; $i < $count; $i++ ) {
if ( $pro_in_catstatus[$i] != '' ) {
$pro_in_catnew[$i]['pro_in_cat_status'] = stripslashes( strip_tags( $pro_in_catstatus[$i] ) );
}
if ( $pro_in_catnames[$i] != '' ) {
$pro_in_catnew[$i]['pro_in_cat_name'] = stripslashes( strip_tags( $pro_in_catnames[$i] ) );}
if ( $pro_in_cattermid[$i] != '' ) {
$pro_in_catnew[$i]['pro_in_cat_termid'] = stripslashes( strip_tags( $pro_in_cattermid[$i] ) );}
if ( $pro_in_catslug[$i] != '' ) {
$pro_in_catnew[$i]['pro_in_cat_slug'] = stripslashes( strip_tags( $pro_in_catslug[$i] ) );}
}
if ( !empty( $pro_in_catnew ) && $pro_in_catnew != $pro_in_catold )
update_post_meta( $post_id, 'pro_in_cat_fields', $pro_in_catnew );
elseif ( empty($pro_in_catnew) && $pro_in_catold )
delete_post_meta( $post_id, 'pro_in_cat_fields', $pro_in_catold );
}