#php #wordpress #woocommerce #cart #checkout
Вопрос:
Я использую этот код, чтобы пользователи могли добавлять товар с пользовательской ценой (по URL-адресу) в корзину. Также это делает их «Продаваемыми индивидуально».
add_filter( 'woocommerce_add_cart_item' , 'set_woo_prices');
add_filter( 'woocommerce_get_cart_item_from_session', 'set_session_prices', 20 , 3 );
function set_woo_prices( $woo_data ) {
if ( ! isset( $_GET['agcs'] ) || empty ( $_GET['agcs'] ) ) { return $woo_data; }
$woo_data['data']->set_price( $_GET['agcs'] );
$woo_data['data']->set_sold_individually('true');
$woo_data['my_price'] = $_GET['agcs'];
return $woo_data;
}
function set_session_prices ( $woo_data , $values , $key ) {
if ( ! isset( $woo_data['my_price'] ) || empty ( $woo_data['my_price'] ) ) { return $woo_data; }
$woo_data['data']->set_price( $woo_data['my_price'] );
$woo_data['data']->set_sold_individually('true');
return $woo_data;
}
Потому что я использую это для повышения продаж. Мне нужен чек, который отменял бы проверку, если бы в корзине были только «Отдельно проданные» товары.
Раньше я делал это с помощью чека «Если в корзине меньше 10 долларов, то откажитесь от оформления заказа».
add_action( 'woocommerce_check_cart_items', 'pokazimiga' );
function pokazimiga() {
if( is_cart() || is_checkout() ) {
global $woocommerce;
$minimum_cart_total = 9;
$total = WC()->cart->subtotal;
if( $total <= $minimum_cart_total ) {
wc_add_notice( sprintf( '<strong>Nakup, manjši od %s %s ni mogoč</strong>'
.'<br />Trenutna vrednost košarice: %s %s',
$minimum_cart_total,
get_option( 'woocommerce_currency'),
$total,
get_option( 'woocommerce_currency') ),
'error' );
}
}
}
Было бы достаточно , если бы все товары в корзине были set_sold_individually('true')
, а затем не разрешали оформлять заказ.
Комментарии:
1. Я понял это и не смог удалить:/. Извините. И спасибо вам за ваш ответ.
Ответ №1:
Следующий код предотвращает оформление заказа, если корзина содержит только «Отдельно проданные» товары.
Объяснение с помощью тегов комментариев, добавленных в код:
function action_woocommerce_check_cart_items() {
// Flag
$flag = false;
// Loop through cart items
foreach( WC()->cart->get_cart() as $cart_item ) {
// Cart contains an item that is not sold individually
if ( ! $cart_item['data']->get_sold_individually() ) {
// Flag becomes true
$flag = true;
// Break loop
break;
}
}
// When the flag is still false amp; the cart is NOT empty
if ( ! $flag amp;amp; ! WC()->cart->is_empty() ) {
// Clear all other notices
wc_clear_notices();
// Avoid checkout displaying an error notice
wc_add_notice( __( 'My custom error message', 'woocommerce' ), 'error' );
// Optional: remove proceed to checkout button
remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20 );
}
}
add_action( 'woocommerce_check_cart_items' , 'action_woocommerce_check_cart_items', 10, 0 );