Задать вопрос

Как добавить поле (флажок) на страницу checkout?

Здравствуйте
Подскажите пожалуйста в какую сторону копать.
Необходимо добавить флажок (checkbox) на странице checkout
vwnmnq9bhqpzpdeiobdp4mroojm.png
Если я правильно понимаю, то должен быть хук на добавление поля и на сохранение/восстановление значения
Сам факт наличия флажка будет зависеть от содержимого корзины
Заранее благодарю
  • Вопрос задан
  • 991 просмотр
Подписаться 2 Простой Комментировать
Решения вопроса 1
pton
@pton Автор вопроса
решение найдено
Для вывода html checkbox-a используется хук
add_action( 'woocommerce_review_order_after_cart_contents', array( __CLASS__, 'woo_review_order_after_cart_contents' ) );

    /**
     * Обработчик хука woocommerce_review_order_before_submit
     * Выводит checkbox на форму CheckOut только для разрешенных заказов
     */
	public static function woo_review_order_before_submit(  ) {

		?>
			<p class="form-row dorepeate">
				<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="dorepeate" <?php checked( self::$dorepeate ); ?> id="dorepeate" />
					<span class="woocommerce-dorepeate-checkbox-text">Включить подписку  для этого заказа?</span>
				</label>
			</p>
		<?php

    }


Для получения значения используем хук
add_filter( 'woocommerce_process_checkout_field_dorepeate', array( __CLASS__, 'woo_process_checkout_field_dorepeate' ) );
    /**
     * Обработчик хука woocommerce_process_checkout_field_
     * для значения checkbox-a 'dorepeate' с формы checkout
     * @param  $value int 1|0
     */
	public static function woo_process_checkout_field_dorepeate( $value ) {
        self::$dorepeate = $value;
        return $value;
    }


Осталось только обвязать логикой сохранения и обработки
Для сохранения в заказе использую хук
// обработчик хука перед сохранением заказа
        add_action( 'woocommerce_checkout_create_order', array( __CLASS__, 'woo_checkout_create_order' ) );
    /**
     * Вызывается Woocommerce перед сохранением заказа
     * @param $order WC_Order
     */
	public static function woo_checkout_create_order( $order ) {

        // сохраняем статус повторяемости заказа
        // определяется возможностью повторяемости для самого товара в корзине
        // и подтверждением пользователя
        $order->update_meta_data( '_is_repeating', self::$dorepeate );
        // начальный статус - 'не активен'
        $order->update_meta_data( '_repeate_status', 'inactive' );
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы