如何禁用woocommerce中的复选框字段?

时间:2019-05-28 00:41:48

标签: wordpress woocommerce field

我在woocommerce中添加了一个复选框字段,我只想在帐户屏幕上查看其结果。我使用以下示例添加了该复选框:

            'register-checkboxes' => array(
            'type'     => 'checkboxes',
            'label'    => __( 'Regions of Construction', 'woo' ),
            'options'  => array(
                'qld1' => __( 'QLD Zone Q1', 'woo' ),
                'qld2' => __( 'QLD Zone Q2', 'woo' ),
                'qld3' => __( 'QLD Zone Q3', 'woo' ),
            ),
            'hide_in_registration' => true,
            'required' => true,
        ),

但是当我添加时:

$field_args['custom_attributes'] = array( 'disabled' => 'disabled' );

在“帐户”屏幕上,此功能用于禁用文本输入,并选择但不选中复选框选项。

我正在使用:https://rudrastyh.com/woocommerce/woocommerce_form_field.html作为指导,但是看来您无法将自定义属性数组传递给复选框的每个选项?我想念什么?

3 个答案:

答案 0 :(得分:1)

woocommerce_form_field()函数在复选框输入类型上不提供此功能,请参见此处:

case 'checkbox':
                $field = '<label class="checkbox ' . implode( ' ', $args['label_class'] ) . '" ' . implode( ' ', $custom_attributes ) . '>
                        <input type="' . esc_attr( $args['type'] ) . '" class="input-checkbox ' . esc_attr( implode( ' ', $args['input_class'] ) ) . '" name="' . esc_attr( $key ) . '" id="' . esc_attr( $args['id'] ) . '" value="1" ' . checked( $value, 1, false ) . ' /> ' . $args['label'] . $required . '</label>';
  • 您可以借助javascript来禁用输入字段,或者使用wp_add_inline_script()或可以在某些.js文件中正常添加Javascript代码。

使用jQuery

无效的输入字段
  • 或可以在您的插件文件中重写woocommerce_form_field()函数。可能无法在子主题功能文件上添加,对此不确定。

谢谢

答案 1 :(得分:0)

尝试使用此jQuery

jQuery(function($){
   $('#Chekbox_Id_Here').attr('checked', false);
});

希望对您有帮助

谢谢。

答案 2 :(得分:0)

我添加了:

add_filter( 'woocommerce_form_field_checkboxes', array( $this,'pm_form_field_modify' ), 10, 4);

然后

    public function pm_form_field_modify( $field, $key, $args, $value ) {
    ob_start();
    $this->pm_print_list_field( $key, $args, $value );
    $field = ob_get_clean();

    if ( $args['return'] ) {
        return $field;
    } else {
        echo $field;
    }
}

然后输出

    public function pm_print_list_field( $key, $field_args, $value = null ) {
    $value = empty( $value ) && $field_args['type'] === 'checkboxes' ? array() : $value;
    ?>
    <div class="form-row">
        <?php 

        // Disable the checkboxes for Zones
        if ($field_args['id'] == 'register-checkboxes' && !is_admin()) {
            $field_args['custom_attributes'] = array( 'disabled' => 'disabled' );
        }


        if ( ! empty( $field_args['label'] ) ) { ?>
            <label>
                <?php echo $field_args['label']; ?>
                <?php if ( ! empty( $field_args['required'] ) ) { ?>
                    <abbr class="required" title="<?php echo esc_attr__( 'required', 'woocommerce' ); ?>">*</abbr>
                <?php } ?>
            </label>
        <?php } ?>
        <ul>
            <?php foreach ( $field_args['options'] as $option_value => $option_label ) {
                $id         = sprintf( '%s_%s', $key, sanitize_title_with_dashes( $option_label ) );
                $option_key = $field_args['type'] === 'checkboxes' ? sprintf( '%s[%s]', $key, $option_value ) : $key;
                $type       = $field_args['type'] === 'checkboxes' ? 'checkbox' : $field_args['type'];
                $checked    = $field_args['type'] === 'checkboxes' ? in_array( $option_value, $value ) : $option_value == $value;
                ?>
                <li>
                    <label for="<?php echo esc_attr( $id ); ?>">
                        <input type="<?php echo esc_attr( $type ); ?>" id="<?php echo esc_attr( $id ); ?>" name="<?php echo esc_attr( $option_key ); ?>" value="<?php echo esc_attr( $option_value ); ?>" <?php checked( $checked ); 

                         // Disable the checkboxes
                         if ( isset($field_args['custom_attributes']['disabled']) ) {
                             echo 'disabled="disabled"';
                         }

                        ?>>
                        <?php echo $option_label; ?>
                    </label>
                </li>
            <?php } ?>
        </ul>
    </div>
    <?php
}

这将禁用复选框组。