Скидка на товар в корзине WooCommerce в зависимости от роли пользователяPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Скидка на товар в корзине WooCommerce в зависимости от роли пользователя

Сообщение Anonymous »

Я использую следующий код в WooCommerce, чтобы добавить скидку в зависимости от ролей пользователей:

Код: Выделить всё

//DISCOUNT
add_filter('woocommerce_add_cart_item_data', 'add_items_default_price_as_custom_data', 20, 3 );
function add_items_default_price_as_custom_data( $cart_item_data, $product_id, $variation_id ){

if ( !is_user_logged_in() ) { return;}

$product_id = $variation_id > 0 ? $variation_id : $product_id;

//get discount from role
$user = wp_get_current_user();
$user_role = $user->roles[0];

$page = jet_engine()->options_pages->registered_pages['shop-opt'];

// give a discount depending on the role
switch ($user_role) {
case 'customer':
$discount_percentage = 0;
break;

case 'discount1':
$discount_percentage = $page->get( 'diskont-riven-1' );
break;

case 'discount2':
$discount_percentage =  $page->get( 'diskont-riven-2' );
break;

case 'discount3':
$discount_percentage =  $page->get( 'diskont-riven-3' );
break;
}

// The WC_Product Object
$product = wc_get_product($product_id);

$price = (float) $product->get_price();

// Set the Product default base price as custom cart item data
$cart_item_data['base_price'] = $price;

// Only for non on sale products
if( ! $product->is_on_sale() ){
// Set the Product discounted price as custom cart item data
$cart_item_data['new_price'] = $price * (100 - $discount_percentage) / 100;

// Set the percentage as custom cart item data
$cart_item_data['percentage'] = $discount_percentage;
}

if( $product->is_on_sale() ){
// Set the Product discounted price as custom cart item data
$cart_item_data['new_price'] = $price;
}
return $cart_item_data;
}

// Display the product name with the discount percentage
add_filter( 'woocommerce_cart_item_name', 'append_percetage_to_item_name', 20, 3 );
function append_percetage_to_item_name( $product_name, $cart_item, $cart_item_key ){
if ( !is_user_logged_in() ) {
return;
}

if( isset($cart_item['percentage']) && isset($cart_item['base_price']) ) {
if( $cart_item['data']->get_price() != $cart_item['base_price'] )
$product_name .= ' (' . $cart_item['percentage'] .  '% discount)';
}
return $product_name;
}

add_action( 'woocommerce_before_calculate_totals', 'custom_discounted_cart_item_price', 20, 1 );
function custom_discounted_cart_item_price( $cart ) {
if ( !is_user_logged_in() ) {
return;
}

if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;

if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;

// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ) {
// Set cart item discounted price
$cart_item['data']->set_price($cart_item['new_price']);
}
}

// CHECK/ADD  ROLE after buuing
add_action( 'woocommerce_order_status_completed', 'order_completed', 1);
function order_completed($order_id) {
$order = wc_get_order( $order_id );
$user_id = $order->get_customer_id();

if ( $user_id == ''){
return ;
}
$user = new WP_User( $user_id);
$user_role = $user->roles[0];

switch ($user_role) {
case 'customer':
$user->set_role( 'discount1' );
break;

case 'discount1':
$user->set_role( 'discount2' );
break;

case 'discount2':
$user->set_role( 'discount3' );
break;
}
}
В основном все в порядке.
Проблема, с которой я столкнулся:
Иногда я получаю пустой заказ, поэтому настраиваю регистратор:

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

Затем гость регистрируется в магазине, подходит к корзине, а его корзина пуста.

И я получаю пустой заказ без адреса электронной почты, имени и продукта.


Подробнее здесь: https://stackoverflow.com/questions/790 ... role-issue
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»