Как я могу отключить поле флажка в WooCommerce? - PullRequest
0 голосов
/ 28 мая 2019

Я добавил поле-флажок в 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 ]

1 голос
/ 28 мая 2019

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 () , либо добавить код Javascript в некоторые файлы .js обычным образом.

отключено поле ввода с помощью jQuery

  • или Может переписать функцию woocommerce_form_field () в ваших файлах плагина. может не работать добавление в функциональный файл дочерней темы, не уверен в этом.

Спасибо

0 голосов
/ 29 мая 2019

Я добавил:

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
}

Это отключило группу флажков.

0 голосов
/ 28 мая 2019

Попробуйте это jQuery

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

Надеюсь, это поможет вам

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...