2015-05-26 4 views
1

я в настоящее время опорожнения и добавили товар в корзину пользователей при посещении сайта - как они когда-либо будет только один продукт (пожертвование), например так:WooCommerce: установить цену программно

function add_donation_to_cart() { 
    global $woocommerce; 
    $woocommerce->cart->empty_cart(); 
    $woocommerce->cart->add_to_cart('195', 1, null, null, null); 
} 

I используйте специальную форму, чтобы получить информацию $_POST - сумма отправляется на страницу пожертвований, эффективно в корзину пользователя, в которой уже есть продукт. Пользовательская сумма используется в функции ниже, чтобы изменить цену. Цена отображается правильно в корзине, на странице проверки, а также на перенаправленном платежном шлюзе (на самой перенаправленной странице).

Однако, как только вы перенаправлены, woocommerce создает заказ, и он отмечает его как «обработку». Недопустимая сумма, отображаемая в заказе.

Функция Я использовал, чтобы изменить цену отображается ниже:

add_action('woocommerce_before_calculate_totals', 'add_custom_total_price'); 

function add_custom_total_price($cart_object) 
{ 
    session_start(); 
    global $woocommerce; 

    $custom_price = 100; 

    if($_POST) 
    { 
     if(!empty($_POST['totalValue'])) 
     { 
      $theVariable = str_replace(' ', '', $_POST['totalValue']); 

      if(is_numeric($theVariable)) 
      { 
       $custom_price = $theVariable; 
       $_SESSION['customDonationValue'] = $custom_price; 
      } 
      else 
      { 
       $custom_price = 100; 
      } 
     } 
    } 
    else if(!empty($_SESSION['customDonationValue'])) 
    { 
     $custom_price = $_SESSION['customDonationValue']; 
    } 
    else 
    { 
     $custom_price = 100; 
    } 

    var_dump($_SESSION['customDonationValue']); 

    foreach ($cart_object->cart_contents as $key => $value) 
    { 
     $value['data']->price = $custom_price; 
    } 
} 

Теперь я не совсем уверен, что если у него есть что-то делать с моим, если заявление, но цена всегда неправильно установлен 100, даже если цена на продукцию установлена ​​на 0.

Любая помощь или понимание будут оценены!

ответ

1

Функции работают, как ожидалось, на самом деле это утверждение было неверным. Я проверил $_POST, который присутствовал, так что хранящаяся сумма $_SESSION не была повторно назначена, так как пользовательская цена после клика была нажата (в этом случае возникают проблемы с POST). Я изменил его, чтобы он выглядел так:

add_action('woocommerce_before_calculate_totals', 'add_custom_total_price'); 

function add_custom_total_price($cart_object) { 
    session_start(); 
    global $woocommerce; 

    $custom_price = 100; 

    if(!empty($_POST['totalValue'])) 
    { 
     $theVariable = str_replace(' ', '', $_POST['totalValue']); 

     if(is_numeric($theVariable)) 
     { 
      $custom_price = $theVariable; 
      $_SESSION['customDonationValue'] = $custom_price; 
     } 
     else 
     { 
      $custom_price = 100; 
     } 
    } 
    else if(!empty($_SESSION['customDonationValue'])) 
    { 
     $custom_price = $_SESSION['customDonationValue']; 
    } 
    else 
    { 
     $custom_price = 50; 
    } 

    foreach ($cart_object->cart_contents as $key => $value) { 
     $value['data']->price = $custom_price; 
    } 
} 

Обязательно измените свой платежный модуль, если потребуется!

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