PHP,从数据库数组中选中标记复选框

时间:2018-02-27 23:46:17

标签: php wordpress

我在网上搜寻试图找到我的确切解决方案但找不到与我的情况相关的任何内容。我需要将2个不同的复选框作为单个数组保存到Wordpress作为自定义post meta。我可以使这部分工作,我遇到的问题是将复选框标记为已选中,如果它们存在于数组中。我没有包含周围的元框代码,只包括与我的问题相关的部分。

这里我是如何尝试显示复选框(这不起作用):

<?php $AMP = get_post_meta($post->ID, 'bta_propertyAMP'); ?>
<input type="checkbox" class="regular-text" name="bta_propertyAMP[]" value="30" <?php echo (in_array('30', $AMP)) ? 'checked="checked"' : ''; ?> /> 30 AMP
<input type="checkbox" class="regular-text" name="bta_propertyAMP[]" value="50" <?php echo (in_array('50', $AMP)) ? 'checked="checked"' : ''; ?> /> 50 AMP

以下是我如何保存(此部分正在运行):

<?php 
$old = get_post_meta($post_id, 'bta_propertyAMP', true);
$new = array();
$amps = $_POST['bta_propertyAMP'];
$count = count( $amps );

for ( $i = 0; $i < $count; $i++ ) {
 if ( $amps[$i] != '' ) :
   $new[$i]['bta_propertyAMP'] = stripslashes( strip_tags( $amps[$i] ) );
 endif;
}

if ( !empty( $new ) && $new != $old ) {
  update_post_meta( $post_id, 'bta_propertyAMP', $new );
} elseif ( empty($new) && $old ) {
  delete_post_meta( $post_id, 'bta_propertyAMP', $old );
}
?>

2 个答案:

答案 0 :(得分:0)

第二个AMP复选框中的条件也是检查

in_array('30', $AMP)

当你想要检查50时:

in_array('50', $AMP)

看起来你实际上只需要用

替换它们
in_array('30', $AMP[0])

in_array('50', $AMP[1])

很抱歉我现在在移动设备上 - 您可能需要删除30和50周围的单引号,但方括号中的数组指针是您需要的,因为您的元数值是一个数组数组(因此循环起作用的原因)

答案 1 :(得分:0)

好的我终于有了这个工作,可能有更好的方法,但如果有其他人遇到这个,这确实有效。我循环遍历数组并为每个复选框创建一个变量,然后我可以在循环外检查它是否为真。

<?php 
$amps = get_post_meta($post->ID, 'bta_propertyAMP', true);
  foreach($amps as $amp) :
    if($amp['bta_propertyAMP'] == 30) { $amp30 = '1'; }
    if($amp['bta_propertyAMP'] == 50) { $amp50 = '1'; }
endforeach; 
?>
<input type="checkbox" class="regular-text" name="bta_propertyAMP[]" value="30" <?php echo ($amp30 == 1) ? 'checked="checked"' : ''; ?> /> 30 AMP
<input type="checkbox" class="regular-text" name="bta_propertyAMP[]" value="50" <?php echo ($amp50 == 1) ? 'checked="checked"' : ''; ?> /> 50 AMP