Я использовал код ниже для процентной скидки (на корзину, а не на товары), которая работает нормально.
Код: Выделить всё
/* discount clubmembers */
add_action( 'woocommerce_cart_calculate_fees', 'discount_based_on_user_role', 20, 1 );
function discount_based_on_user_role( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return; // Exit
// only for 'clubmember' role
if ( ! current_user_can('clubmember') )
return; // Exit
// Kortings percentage
$percentage = 10
$discount = $cart->get_subtotal() * $percentage / 100; // Calculation
// Applying discount
$cart->add_fee( sprintf( __("Clubmember discount (%s)", "woocommerce"), $percentage . '%'), -$discount, true );
}
Мне нужна скидка на сам продукт, но ТОЛЬКО если заполнено мета-поле «clubmember_price». Для этого я заменил код на этот:
Код: Выделить всё
/* Custom prices by user role */
add_filter('woocommerce_product_get_price', 'custom_price_assign', 10, 2);
add_filter('woocommerce_product_variation_get_price', 'custom_price_assign', 10, 2); // For product variations (optional)
function custom_price_assign( $price, $product ) {
// Check if the user has a role of wholesaler
if ( current_user_can('clubmember') && $clubmember_price = $product->get_meta('clubmember_price') ){
return $price * (100 - $clubmember_price) / 100;
}
return $price;
}
Я хочу отображать обычную цену и показывать скидку на странице продукта, и в корзине/оформлении заказа.
Я пытался каким-либо образом объединить два кода, но, поскольку я новичок в PHP, я не могу заставить его работать. У меня такое чувство, что мне нужно использовать «если» между двумя функциями, но я не могу понять, как и возможно ли это.
Я действительно пытаюсь понять, как это работает. и иметь возможность самому писать эти фрагменты в будущем. Если кто-нибудь сможет объяснить, что я упускаю, было бы здорово!
Подробнее здесь: https://stackoverflow.com/questions/768 ... le-in-wooc