Отображение количества и лимита использования купонов на странице благодарности WooCommerce

#wordpress #woocommerce #price #coupon

#php #wordpress #woocommerce #hook-woocommerce #купон

Вопрос:

Я хочу отобразить оставшийся номер купона на странице благодарности WooCommerce

Например: вы использовали тестовый купон 3 раза, и осталось еще 10.

Это мой код:

 add_action('woocommerce_after_cart_table', 'coupon_count');
function coupon_count() {
    global $woocommerce;

    if ( ! empty( $woocommerce->cart->applied_coupons ) ) {
         $my_coupon = $woocommerce->cart->get_coupons() ;
         foreach($my_coupon as $coupon){

            if ( $post = get_post( $coupon->id ) ) {

                        $counter = $coupon->get_usage_count();
                        echo "<span class='name-coupon'><b>Total usage for coupon </b><b>'</b><b>".$coupon->code."</b><b>'</b><b>: </b></span>";
                        echo "<span class='coupon-counter'>".($counter)."</span>";

            }
        }
    }
}
 

Но у меня две проблемы:

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

2. Замена woocommerce_after_cart_table на woocommerce_thankyou на странице благодарности не выполняет код.

Ответ №1:

  • Вместо использования объекта корзины на странице благодарности используется объект заказа. Поэтому мы собираемся использовать этот объект вместо
  • Вы можете использовать get_usage_limit_per_user(), чтобы получить лимит использования купона для каждого клиента (для одного клиента)
  • ИЛИ используйте get_usage_limit(), чтобы получить лимит использования купона.

Таким образом, вы получаете:

 function action_woocommerce_thankyou( $order_id ) {
    // Get $order object
    $order = wc_get_order( $order_id );

    foreach( $order->get_coupon_codes() as $coupon_code ) {
        // Get the WC_Coupon object
        $coupon = new WC_Coupon( $coupon_code );

        // Get usage count
        $count = $coupon->get_usage_count();
        
        // Get coupon usage limit per customer
        $limit = $coupon->get_usage_limit_per_user();
        
        // OR use this instead, to get coupon usage limit.
        // $limit = $coupon->get_usage_limit();
        
        // NOT empty
        if ( ! empty ( $count ) amp;amp; ! empty ( $limit ) ) {
            // Calculate remaining
            $remaining = $limit - $count;
        
            // Output
            echo sprintf( '<span class="coupon-class">You used the <strong>%s</strong> coupon <strong>%d</strong> times and there are <strong>%d</strong> more left</span>', $coupon_code, $count, $remaining );
        }
    }
}
add_action( 'woocommerce_thankyou', 'action_woocommerce_thankyou', 10, 1 );
 

Комментарии:

1. Могу ли я отобразить список всех пользователей, которые использовали этот код скидки в той же функции?

2. Да, используйте get_used_by() — получите записи всех пользователей, которые использовали текущий купон.

Ответ №2:

 add_action('woocommerce_after_cart_table', 'coupon_count');
function coupon_count() {
    global $woocommerce;

    if ( ! empty( $woocommerce->cart->applied_coupons ) ) {
         $my_coupon = $woocommerce->cart->get_coupons() ;
         foreach($my_coupon as $coupon){

            if ( $post = get_post( $coupon->id ) ) {

                        $counter = $coupon->get_usage_count();
                        $remaining = $coupon->get_usage_limit()-$counter;
                        echo "<span class='name-coupon'><b>Total usage for coupon </b><b>'</b><b>".$coupon->code."</b><b>'</b><b>: </b></span>";
                        echo "<span class='coupon-counter'>".($counter)."</span>";
                        echo "<span class='coupon-counter'> there are ".($remaining)." more left</span>";

            }
        }
    }
}