2017-02-22 35 views
1

Я пытаюсь создать «продукт Погасить страницу, как показано в this tutorial на SitePoint.Применить WooCommerce код купона на кассе

Проблема заключается в том, что продукт действительно будет добавлен в корзину, и вы можете приступить к кассе, но скидка, связанная с кодом купона, не применяется автоматически. В кодовом купоне я создал значение, установленное на 100% скидку.

Вы можете снова использовать код купона на купоне через «У вас есть код купона «вылетают на странице проверки, но это побеждает всю цель.

Я также не g и др этот код работает, чтобы начать с, но я был в состоянии понять, что:

// Check coupon to make determine if its valid or not if(! $coupon->id && ! isset($coupon->id)) { ...Rest of code here...

должно быть:

// Check coupon to make determine if its valid or not 
    if(! $coupon->id && ! isset($coupon_id)) { 

Пожалуйста, обратите внимание, что второй не IsSet имя переменной. Может быть, это работает, но это не правильный способ справиться с вещами, все знают, но я.

К сожалению, я вышел из своей зоны комфорта a.t.m. В моем прямом кругу друзей у меня нет никого, что я мог бы получить и получить другой ответ: «А?»? », Поэтому я делаю это здесь, на Stackoverflow.

Ссылка на учебник по SitePoint только, вероятно, не оценили, поэтому здесь полный код, я использую:

обработчики Ajax добавлены в functions.php

add_action('wp_ajax_spyr_coupon_redeem_handler', 'spyr_coupon_redeem_handler'); 
add_action('wp_ajax_nopriv_spyr_coupon_redeem_handler', 'spyr_coupon_redeem_handler'); 

Купон Войти также добавлены в functions.php

function spyr_coupon_redeem_handler() { 

    // Get the value of the coupon code 
    $code = $_REQUEST['coupon_code']; 

    // Check coupon code to make sure is not empty 
    if(empty($code) || !isset($code)) { 
     // Build our response 
     $response = array(
      'result' => 'error', 
      'message' => 'Code text field can not be empty.' 
     ); 

     header('Content-Type: application/json'); 
     echo json_encode($response); 

     // Always exit when doing ajax 
     exit(); 
    } 

    // Create an instance of WC_Coupon with our code 
    $coupon = new WC_Coupon($code); 

    // Check coupon to make determine if its valid or not 
    if(! $coupon->id && ! isset($coupon_id)) { 
     // Build our response 
     $response = array(
      'result' => 'error', 
      'message' => 'Invalid code entered. Please try again.' 
     ); 

     header('Content-Type: application/json'); 
     echo json_encode($response); 

     // Always exit when doing ajax 
     exit(); 

    } else { 

     // Attempting to add the coupon code as a discount. 
     WC()->cart->add_discount($code); 

     // Coupon must be valid so we must 
     // populate the cart with the attached products 
     foreach($coupon->product_ids as $prod_id) { 
      WC()->cart->add_to_cart($prod_id); 
     } 

     // Build our response 
     $response = array(
      'result' => 'success', 
      'href'  => WC()->cart->get_cart_url() 
     ); 

     header('Content-Type: application/json'); 
     echo json_encode($response); 

     // Always exit when doing ajax 
     exit(); 
    } 
} 

код формы представления JQuery, через поставлен в очередь зарегистрированных обработчиков Ajax в functions.php

jQuery(document).ready(function() { 
    jQuery('#ajax-coupon-redeem input[type="submit"]').click(function(ev) { 

    // Get the coupon code 
    var code = jQuery('input#coupon').val(); 

    // We are going to send this for processing 
    data = { 
     action: 'spyr_coupon_redeem_handler', 
     coupon_code: code 
    } 

    // Send it over to WordPress. 
    jQuery.post(woocommerce_params.ajax_url, data, function(returned_data) { 
     if(returned_data.result == 'error') { 
      jQuery('p.result').html(returned_data.message); 
     } else { 
      // Hijack the browser and redirect user to cart page 
      window.location.href = returned_data.href; 
     } 
    }) 

    // Prevent the form from submitting 
    ev.preventDefault(); 
    }); 
}); 

Благодарим за внимание, указав меня в правильном направлении.

ответ

1

Обновление: В этот момент я получил желаемую функциональность.

Что нужно сделать, это добавить:

// Let's add the discount to the cart. 
global $woocommerce; 
WC()->cart->add_discount($code); 

в заявлении Еогеасп. Полное другое заявление теперь выглядит следующим образом:

} else { 

    // Coupon must be valid so we must 
    // populate the cart with the attached products 
    foreach($coupon->product_ids as $prod_id) { 
     WC()->cart->add_to_cart($prod_id); 

     // Let's add the discount to the cart. 
     global $woocommerce; 
     WC()->cart->add_discount($code); 
    } 

    // Build our response 
    $response = array(
     'result' => 'success', 
     'href'  => WC()->cart->get_cart_url() 
    ); 

    header('Content-Type: application/json'); 
    echo json_encode($response); 

    // Always exit when doing ajax 
    exit(); 

Я все еще не уверен, что это правильный способ handeling, но это, кажется, работает.

Например, я вызываю (?!) глобальную переменную $woocommerce, но ниже я использую глобальный (?!) класс WC() для добавления купона. Не уверен, что это так же чисто и логично, как и получается.

Если кто-нибудь знает о лучшем/чистом пути, пожалуйста, дайте мне знать!Я рад узнать от вас, ребята, и, может быть, однажды я смогу вернуть благосклонность, кто знает.

 Смежные вопросы

  • Нет связанных вопросов^_^