2016-09-28 6 views
2

Я пытаюсь проверить, действительно ли купон остается (не достиг предела использования) и отображать контент в этом состоянии.WooCommerce: проверьте, действительно ли действителен купон

Причина в том, что я хочу иметь возможность раздавать код купона конкретным посетителям, но, очевидно, не хочу раздавать купон, который уже достиг предела использования.

Я пытаюсь добиться этого с PHP и представьте себе код, чтобы быть что-то вроде этого:

<?php if (coupon('mycouponcode') isvalid) { 
    echo "Coupon Valid" 
} else { 
    echo "Coupon Usage Limit Reached" 
} ?> 

Любая помощь здесь было бы здорово :)

+0

Купон зависит от множества критериев, поэтому вы хотите только использовать лимит использования? –

+0

@RaunakGupta yep, ограничение использования - единственный критерий, который меня интересует :) – NuclearApe

ответ

3
$code = 'test123'; 

$coupon = new WC_Coupon($code); 
$coupon_post = get_post($coupon->id); 
$coupon_data = array(
    'id' => $coupon->id, 
    'code' => $coupon->code, 
    'type' => $coupon->type, 
    'created_at' => $coupon_post->post_date_gmt, 
    'updated_at' => $coupon_post->post_modified_gmt, 
    'amount' => wc_format_decimal($coupon->coupon_amount, 2), 
    'individual_use' => ('yes' === $coupon->individual_use), 
    'product_ids' => array_map('absint', (array) $coupon->product_ids), 
    'exclude_product_ids' => array_map('absint', (array) $coupon->exclude_product_ids), 
    'usage_limit' => (!empty($coupon->usage_limit)) ? $coupon->usage_limit : null, 
    'usage_count' => (int) $coupon->usage_count, 
    'expiry_date' => (!empty($coupon->expiry_date)) ? date('Y-m-d', $coupon->expiry_date) : null, 
    'enable_free_shipping' => $coupon->enable_free_shipping(), 
    'product_category_ids' => array_map('absint', (array) $coupon->product_categories), 
    'exclude_product_category_ids' => array_map('absint', (array) $coupon->exclude_product_categories), 
    'exclude_sale_items' => $coupon->exclude_sale_items(), 
    'minimum_amount' => wc_format_decimal($coupon->minimum_amount, 2), 
    'maximum_amount' => wc_format_decimal($coupon->maximum_amount, 2), 
    'customer_emails' => $coupon->customer_email, 
    'description' => $coupon_post->post_excerpt, 
); 

$usage_left = $coupon_data['usage_limit'] - $coupon_data['usage_count']; 

if ($usage_left > 0) { 
    echo 'Coupon Valid'; 
} 
else { 
    echo 'Coupon Usage Limit Reached'; 
} 

код протестирован и полностью функциональны.

Ссылка

+0

Это всегда возвращает «Достигнутый предел использования купона». Я заменил test123 многочисленными купонами (действителен, истек, израсходовал, использовал левый и т. Д.), Но без радости :( – NuclearApe

+0

@NuclearApe: с любой допустимой печать купона '$ coupon_data ['usage_limit']', '$ coupon_data ['usage_count '] 'и' $ coupon_data [' expiry_date '] 'и посмотреть, что они возвращают. –

+0

Только для информации: Существует два связанных метода для класса WC_Coupon (' is_valid() 'и' is_valid_for_cart() '). ** Но к сожалению, они не работают ... ** Есть ** ошибка **, поскольку они ** всегда возвращают false **. Поэтому я разместил нить в WordPress> Темы поддержки Woocommerce: https://wordpress.org/ support/topic/wc_coupon-is_valid-method-always-return-false/ – LoicTheAztec

0

Вы можете использовать this плагин для вашей цели.

+0

[Следует избегать ответов только по ссылке] (http://stackoverflow.com/help/how-to-answer): 'Рекомендуется ссылаться на внешние ресурсы, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы у ваших друзей-пользователей были некоторые идея, что это такое и почему она есть. Всегда указывайте наиболее релевантную часть важной ссылки, если целевой сайт недоступен или постоянно находится в автономном режиме. ' – indextwo