选中()回显到页面的问题

时间:2012-09-12 作者:voodooGQ

这有点奇怪。我正在构建一个小部件,用于浏览类型为product 并在管理面板中显示复选框列表,以显示/显示小部件中的产品。

除了checked() 函数不仅仅是添加checked=\'checked\' 但它也将其显示在页面上。下面是form 我的小部件部分:

function form( $instance ) {
    $instance = wp_parse_args( (array) $instance, array( \'title\' => __(\'Featured Products\', \'pp\') ) );
    $title = $instance[\'title\'];
    $products = new WP_Query( array( \'post_type\' => \'product\', \'post_count\' => -1 ) );
  ?>
    <p>
      <label for="<?php echo $this->get_field_id(\'title\'); ?>">
        <?php _e(\'Title:\', \'mp\') ?>
        <input class="widefat" id="<?php echo $this->get_field_id(\'title\'); ?>" name="<?php echo $this->get_field_name(\'title\'); ?>" type="text" value="<?php echo attribute_escape($title); ?>" />
      </label>

      <?php while ($products->have_posts()) : $products->the_post(); $prod = get_the_id();?>
      <?php
          $sku = get_post_meta($prod, \'sku\', true);
          $sku = $sku[0];
          $$sku = isset($instance[$sku]) ? checked( (bool)$instance[$sku], true ) :false; 
      ?>

    <input type="checkbox" class="checkbox" <?php echo $$sku; ?> id="<?php echo $this->get_field_id($sku); ?>" name="<?php echo $this->get_field_name($sku); ?>" value="1" />
    <label for="<?php echo $this->get_field_id($sku); ?>"><?php echo _e( the_title() ); ?></label><br />

      <?php endwhile; 
        wp_reset_query();
       ?>
    </p>
  <?php
  }
当您进入管理面板中的widgets元框时,选中并保存的项目显示为(请注意[] 表示复选框本身):

checked=\'checked\'[] Product
以及相应的HTML:

             checked=\'checked\'
<input type="checkbox" class="checkbox" checked="checked" id="widget-fsol_featured_products_widget-2-WM3987HW" name="widget-featured_product_widget[2][W8DIW2]" value="1">
<label for="widget-featured_product_widget-2-W8DIW2">W8DIW2</label>
我尝试了几种不同的“修复”,但都没有成功。有人有主意吗?

1 个回复
最合适的回答,由SO网友:SeventhSteel 整理而成

默认情况下,checked 回声。如果将(当前为空)第三个参数设置为false, 它应该按预期工作。将行更改为:

$$sku = isset( $instance[$sku] ) ? checked( (bool) $instance[$sku], true, false ) : false;
更多信息:http://codex.wordpress.org/Function_Reference/checked

结束