2

голосов
1

ответ
742

Просмотры

Check if WooCommerce Coupon already exists

I'm editing a packing slip, which is generated when the order is paid and being packed. The packing slip automatically adds a coupon which will be printed on it as well, if a product of a certain category is included. My problem is, that every time I refresh or reopen the packing slip, a new coupon is being generated with the same coupon code. So I would like to implement a rule, that checks if the coupon_code already exists. add_action( 'wpo_wcpdf_after_order_details', 'wpo_wcpdf_custom_text_categories', 10, 2 ); function wpo_wcpdf_custom_text_categories ($template_type, $order) { // collect categories from order items $order_cats = array(); $items = $order->get_items(); foreach ($items as $item_id => $item) { $product = $order->get_product_from_item($item); if ($product) { $terms = get_the_terms( $product->id , 'product_cat' ); foreach ($terms as $term) { $order_cats[$term->term_id] = $term->name; } } } $target = array('Testtragen', 'Testtragetuch'); // // check for your category requirement if(count(array_intersect($order_cats, $target)) > 0 && $template_type == 'packing-slip'){ $coupon_code = $order->get_order_number(); $discount_type = 'fixed_product'; // Type: fixed_cart, percent, fixed_product, percent_product $order_date = get_post_meta( $order->id, '_wcpdf_order_date', true ); $due_date = date_i18n( get_option( 'date_format' ), strtotime( $invoice_date . ' + 60 days') ); $email = $order->billing_email; $amount = '10'; // Amount $discount_type = 'fixed_cart'; // Type: fixed_cart, percent, fixed_product, percent_product $coupon = array( 'post_title' => $coupon_code, 'post_content' => '', 'post_status' => 'publish', 'post_author' => 1, 'post_type' => 'shop_coupon' ); /* $new_coupon_id = wp_insert_post( $coupon ); // Add meta update_post_meta( $new_coupon_id, 'discount_type', $discount_type ); update_post_meta( $new_coupon_id, 'coupon_amount', $amount ); update_post_meta( $new_coupon_id, 'individual_use', 'no' ); update_post_meta( $new_coupon_id, 'product_ids', '' ); update_post_meta( $new_coupon_id, 'exclude_product_ids', '' ); update_post_meta( $new_coupon_id, 'usage_limit', '' ); update_post_meta( $new_coupon_id, 'expiry_date', '' ); update_post_meta( $new_coupon_id, 'apply_before_tax', 'yes' ); update_post_meta( $new_coupon_id, 'free_shipping', 'no' ); */ } } So I would like to add an if statement before the wp_insert_post($coupon), that all this code only gets executed if the coupon with the coupon_code doesn't already exist. I tried : term_exists( $coupon_code, ‘coupons’)but this didn't work. Thanks for your help!
clukas