2016-09-28 4 views
2

Ich versuche zu überprüfen, ob ein Gutschein noch gültig ist (hat seine Nutzungsgrenze nicht erreicht) und Inhalt unter dieser Bedingung anzuzeigen.WooCommerce: Überprüfen Sie, ob der Gutschein gültig ist

Der Grund dafür ist, dass ich bestimmten Besuchern einen Couponcode aushändigen möchte, aber natürlich keinen Coupon aushändigen möchte, der sein Nutzungslimit bereits erreicht hat.

Ich versuche, dies mit PHP zu erreichen und den Code vorstellen, so etwas zu sein:

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

Jede Hilfe hier wäre toll :)

+0

Ein Gutschein ist abhängig von einer Vielzahl von Kriterien, so dass Sie nur für Nutzungsbeschränkung möchten? –

+0

@RaunakGupta yep, Nutzungsbeschränkung ist das einzige Kriterium, das mich interessiert :) – NuclearApe

Antwort

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'; 
} 

Der Code ist getestet und voll funktional.

Referenz

+0

Dies wird immer "Coupon Usage Limit Reached" zurückgegeben. Ich habe test123 durch zahlreiche Coupons ersetzt (gültig, abgelaufen, verbraucht, links usw.), aber keine Freude :( – NuclearApe

+0

@NuclearApe: mit einem gültigen Coupon drucken Sie $ cupon_data ['usage_limit'] ',' $ coupon_data ['usage_count '] 'und' $ coupon_data [' expiration_date '] 'und sehen, was sie zurückgeben –

+0

Nur für Info: Es gibt 2 verwandte Methoden für WC_Coupon-Klasse (' is_valid() 'und' is_valid_for_cart() '). ** Aber Leider funktionieren sie nicht ... ** Es gibt einen ** Fehler **, da sie ** immer falsch zurückgeben. ** Also habe ich einen Thread in WordPress> Woocommerce Support Threads gepostet: https://wordpress.org/ support/topic/wc_coupon-is_valid-methode-always-return-false/ – LoicTheAztec

0

Sie können this Plugin für Ihre Zwecke verwenden.

+0

[Link-only-Antworten sollten vermieden werden] (http://stackoverflow.com/help/how-to-answer): 'Links zu externen Ressourcen werden empfohlen, aber bitte fügen Sie Kontext um den Link hinzu, so dass Ihre Mitbenutzer einige haben Idee was es ist und warum es da ist. Zitiere immer den relevantesten Teil eines wichtigen Links, falls die Zielseite nicht erreichbar ist oder dauerhaft offline geschaltet wird – indextwo

Verwandte Themen