Сделать флажок AutomateWoo обязательным при регистрации WooCommerce

Плагин AutomateWoo добавляет поле флажка в раздел регистрации (находится на странице Моя учетная запись, когда пользователь не вошел в систему), и я пытаюсь здесь сделать его обязательным.

Я не хочу, чтобы люди могли зарегистрироваться, не поставив галочку в этом поле.

Коробка является optin и отображается следующим образом:

<p class="automatewoo-optin form-row">
    <label class="woocommerce-form__label woocommerce-form__label-for-checkbox checkbox">
        <input type="checkbox" class="woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" name="automatewoo_optin" id="automatewoo_optin">
        <span class="automatewoo-optin__checkbox-text">I want to receive updates about products and promotions.</span>
    </label>
</p>

Вот моя попытка кода сделать этот флажок обязательным:

add_filter( 'woocommerce_register_form_start', 'bd_require_automatewoo_optin');
function bd_require_automatewoo_optin( $fields ) {
$fields['automatewoo_optin']['required'] = true;
return $fields;
}

Я также пытался использовать хуки woocommerce_register_form и woocommerce_forms_field.

Изображение превью формы регистрации, чекбокс расположен внизу.

Флажок, добавленный в нижнюю часть формы регистрации, необходимо сделать обязательным.

Как я могу сделать флажок Make AutomateWoo обязательным в разделе регистрации WooCommerce?


Редактировать:

В некоторых случаях вам может потребоваться заменить второе «требуемое» на «истинное»…

<script>
jQuery(document).ready(function($){
   $('input[name="automatewoo_optin"]').prop('required', 'required');
});
</script>

person Alex Banks    schedule 22.10.2020    source источник


Ответы (2)


Чтобы сделать поле флажка, расположенное в регистрационной форме WooCommerce, обязательным, используйте следующее:

// Validate WooCommerce registration form custom fields.
add_action( 'woocommerce_register_post', 'wc_validate_automatewoo_optin_fields', 10, 3 );
function wc_validate_automatewoo_optin_fields( $username, $email, $validation_errors ) {
    if ( ! isset($_POST['automatewoo_optin']) || empty($_POST['automatewoo_optin']) ) {
        $validation_errors->add('optin_error', __('The Checkbox is a required field', 'woocommerce') );
    }
        
    return $validation_errors;
}

Затем необязательно используйте также следующее, чтобы сделать поле флажка обязательным для просмотра:

// Mark the checkbox field as required
add_filter( 'woocommerce_register_form_end', 'add_automatewoo_optin_jquery');
function add_automatewoo_optin_jquery() {
    ?>
    <script>
    (function($){
       $('p.automatewoo-optin').addClass('validate-required');
       $('p.automatewoo-optin > label > span').append('<abbr class="required" title="required">*</abbr>');
    })(jQuery);
    </script>
    <?php
}

Код находится в файле functions.php активной дочерней темы (или активной темы). Проверено и работает.

person LoicTheAztec    schedule 22.10.2020
comment
+1 Спасибо, Лоик, этот ответ работает намного лучше, после некоторого тестирования с использованием метода jQuery Говарда я обнаружил проблему на странице оформления заказа, где поле игнорировалось, а регистрация была возможна без его отметки. - person Alex Banks; 26.10.2020
comment
@AlexBanks Вы задали свой вопрос о регистрации WooCommerce в моей учетной записи, и мой код отвечает только на это… Поскольку мой ответ отвечает на ваш первоначальный вопрос и работает, вы можете принять ответ, спасибо. Теперь для оформления заказа вам нужно будет задать другой вопрос и указать соответствующий сгенерированный HTML-код для этого поля подписки. - person LoicTheAztec; 26.10.2020

Используйте jQuery. Либо добавьте в свою тему скрипты, либо можете добавить в wp_footer и завернуть в <script> </script>

jQuery(document).ready(function($){
   $('input[name="automatewoo_optin"]').prop('checked', true);
});
person Howard E    schedule 22.10.2020
comment
Ааа я об этом не подумал. Этот jQuery автоматически устанавливает флажок. Как мы можем сделать так, чтобы поле НЕ было выбрано, но пользователь должен отметить его перед отправкой формы? - person Alex Banks; 22.10.2020