| Server IP : 104.171.130.249 / Your IP : 216.73.216.146 Web Server : nginx/1.25.5 System : Linux 0dac65491b7e 6.8.0-134-generic #134-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 26 18:43:11 UTC 2026 x86_64 User : root ( 0) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/html/wp-content/themes/matreshka/woocommerce/cart/ |
Upload File : |
<?php
/**
* Cart totals
*
* This template can be overridden by copying it to yourtheme/woocommerce/cart/cart-totals.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @version 2.3.6
*/
defined( 'ABSPATH' ) || exit;
?>
<div class="cart-info <?php echo ( WC()->customer->has_calculated_shipping() ) ? 'calculated_shipping' : ''; ?>">
<?php do_action( 'woocommerce_before_cart_totals' ); ?>
<!-- Адрес доставки -->
<button class="btn btn-white montserrat-medium">
<a class="d-flex w-100" href="<?php echo esc_url( home_url( '/my-account/edit-address/billing/' ) ); ?>">
<img src="<?php echo get_template_directory_uri(); ?>/assets/icons/Delivery.svg" alt="subtract icon" class="me-3 ">
<div>
<p class="montserrat-semibold">
<?php
$address = '';
if ( is_user_logged_in() ) {
$user_id = get_current_user_id();
$address = trim( (string) get_user_meta( $user_id, 'billing_address_1', true ) );
if ( '' === $address ) {
$address = trim( (string) get_user_meta( $user_id, 'shipping_address_1', true ) );
}
}
echo esc_html( $address ?: 'Добавьте адрес доставки' );
?>
</p>
<p class="montserrat-medium">Адрес доставки</p>
</div>
<img src="<?php echo get_template_directory_uri(); ?>/assets/icons/AltArrowRight.svg" alt="alt arrow right icon" class="me-1">
</a>
</button>
<!-- Если не будет в наличии -->
<?php
// Restore saved preferences from session → user meta → defaults
$substitution_prefs = WC()->session->get('matreshka_substitution_prefs');
if ( empty( $substitution_prefs ) && is_user_logged_in() ) {
$uid = get_current_user_id();
$saved_type = get_user_meta( $uid, '_matreshka_substitution_type', true );
if ( $saved_type ) {
$substitution_prefs = [
'substitution' => $saved_type,
'comment' => get_user_meta( $uid, '_matreshka_packer_comment', true ) ?: '',
'less_bags' => get_user_meta( $uid, '_matreshka_less_bags', true ) === 'yes',
'vegs_in_bags' => get_user_meta( $uid, '_matreshka_vegs_in_bags', true ) === 'yes',
];
}
}
if ( empty( $substitution_prefs ) ) {
$substitution_prefs = [
'substitution' => 'call_replace',
'comment' => '',
'less_bags' => false,
'vegs_in_bags' => false,
];
}
$sub_labels = [
'call_replace' => 'Позвонить и заменить',
'no_replace' => 'Не заменять',
'auto_replace' => 'Не спрашивать и заменить',
];
$current_sub_label = $sub_labels[$substitution_prefs['substitution']] ?? 'Позвонить и заменить';
?>
<button class="btn btn-white montserrat-medium" id="btn-substitution-modal">
<img src="<?php echo get_template_directory_uri(); ?>/assets/icons/InfoCircleRed.svg" alt="subtract icon" class="me-3">
<div>
<p class="montserrat-semibold">Если не будет в наличии</p>
<p class="montserrat-medium" id="substitution-current-label"><?php echo esc_html($current_sub_label); ?></p>
</div>
<img src="<?php echo get_template_directory_uri(); ?>/assets/icons/AltArrowRight.svg" alt="alt arrow right icon" class="me-1">
</button>
<!-- Модалка: Замены и пожелания -->
<div class="substitution-overlay" id="substitution-overlay"></div>
<div class="substitution-modal" id="substitution-modal">
<div class="substitution-modal__header">
<h3 class="montserrat-semibold">Замены и пожелания</h3>
<button class="substitution-modal__close" id="substitution-modal-close">×</button>
</div>
<div class="substitution-modal__body">
<!-- Radio options -->
<div class="substitution-radio-group">
<label class="substitution-radio-item <?php echo $substitution_prefs['substitution'] === 'call_replace' ? 'active' : ''; ?>">
<div class="substitution-radio-item__text">
<span class="montserrat-semibold">Позвонить и заменить</span>
<span class="montserrat-regular">Сотрудник магазина позвонит вам для согласования замен в заказе.</span>
</div>
<input type="radio" name="substitution_type" value="call_replace" <?php checked($substitution_prefs['substitution'], 'call_replace'); ?>>
<span class="substitution-radio-item__circle"></span>
</label>
<label class="substitution-radio-item <?php echo $substitution_prefs['substitution'] === 'no_replace' ? 'active' : ''; ?>">
<div class="substitution-radio-item__text">
<span class="montserrat-semibold">Не заменять</span>
<span class="montserrat-regular">Мы удалим товары и вернем деньги.</span>
</div>
<input type="radio" name="substitution_type" value="no_replace" <?php checked($substitution_prefs['substitution'], 'no_replace'); ?>>
<span class="substitution-radio-item__circle"></span>
</label>
<label class="substitution-radio-item <?php echo $substitution_prefs['substitution'] === 'auto_replace' ? 'active' : ''; ?>">
<div class="substitution-radio-item__text">
<span class="montserrat-semibold">Не спрашивать и заменить</span>
<span class="montserrat-regular">Мы сами заменим отсутствующие товары.</span>
</div>
<input type="radio" name="substitution_type" value="auto_replace" <?php checked($substitution_prefs['substitution'], 'auto_replace'); ?>>
<span class="substitution-radio-item__circle"></span>
</label>
</div>
<!-- Комментарий сборщику -->
<div class="substitution-comment">
<p class="montserrat-semibold">Комментарий сборщику</p>
<textarea
id="substitution-comment"
class="montserrat-regular"
placeholder="Напишите, что необходимо учесть при сборке"
rows="3"
><?php echo esc_textarea($substitution_prefs['comment']); ?></textarea>
</div>
<!-- Пакетные опции -->
<div class="substitution-bag-options">
<label class="substitution-bag-item <?php echo !empty($substitution_prefs['less_bags']) ? 'active' : ''; ?>">
<span class="montserrat-medium">Меньше пакетов</span>
<input type="checkbox" name="less_bags" value="1" <?php checked(!empty($substitution_prefs['less_bags'])); ?>>
<span class="substitution-bag-item__circle"></span>
</label>
<label class="substitution-bag-item <?php echo !empty($substitution_prefs['vegs_in_bags']) ? 'active' : ''; ?>">
<span class="montserrat-medium">Овощи в пакеты</span>
<input type="checkbox" name="vegs_in_bags" value="1" <?php checked(!empty($substitution_prefs['vegs_in_bags'])); ?>>
<span class="substitution-bag-item__circle"></span>
</label>
</div>
</div>
<div class="substitution-modal__footer">
<button class="btn btn-red-primary montserrat-semibold" id="substitution-modal-done">Готово</button>
</div>
</div>
<!-- Промокод -->
<?php if ( wc_coupons_enabled() ) : ?>
<div class="btn btn-white btn-promo montserrat-medium">
<img src="<?php echo get_template_directory_uri(); ?>/assets/icons/promo.svg" alt="subtract icon" class="me-3">
<div>
<p class="montserrat-semibold">Промокод</p>
<form method="post" action="<?php echo esc_url( wc_get_cart_url() ); ?>" class="matreshka-coupon-form">
<input
type="text"
name="coupon_code"
class="form-control montserrat-medium"
placeholder="PROMO"
value=""
/>
<button type="submit" class="btn btn-red-primary montserrat-semibold matreshka-coupon-submit" name="apply_coupon" value="<?php esc_attr_e( 'Apply coupon', 'woocommerce' ); ?>" hidden>Применить</button>
<?php wp_nonce_field( 'woocommerce-cart', 'woocommerce-cart-nonce' ); ?>
</form>
</div>
</div>
<?php endif; ?>
<!-- Расчеты -->
<div class="cart-info-pay">
<!-- Сумма заказа -->
<div class="characteristic-item">
<p class="montserrat-regular">Сумма заказа</p>
<span class="hr"></span>
<p class="montserrat-medium product-page-price">
<?php wc_cart_totals_subtotal_html(); ?>
</p>
</div>
<!-- Сборка и упаковка -->
<?php $bonus_discount = 0; ?>
<?php foreach ( WC()->cart->get_fees() as $fee ) : ?>
<?php
if ( 'Списание бонусов' === $fee->name ) {
// This fee is presented together with the rest of the savings below.
$bonus_discount += abs( (float) $fee->total );
continue;
}
?>
<div class="characteristic-item">
<p class="montserrat-regular"><?php echo esc_html( $fee->name ); ?></p>
<span class="hr"></span>
<p class="montserrat-medium">
<?php wc_cart_totals_fee_html( $fee ); ?>
</p>
</div>
<?php endforeach; ?>
<!-- Скидки по промокодам и акциям -->
<?php
$total_discount = 0;
$promo_discount = 0;
$sale_discount = 0;
$applied_coupons = array();
// Get coupon discounts
foreach ( WC()->cart->get_coupons() as $code => $coupon ) :
$coupon_code = $coupon->get_code();
$discount_amount = WC()->cart->get_coupon_discount_amount( $coupon_code, WC()->cart->display_cart_ex_tax );
$total_discount += $discount_amount;
$promo_discount += $discount_amount;
$applied_coupons[] = array(
'code' => $coupon_code,
'discount' => $discount_amount,
'remove_url' => add_query_arg( 'remove_coupon', rawurlencode( $coupon_code ), wc_get_cart_url() ),
'remove_label'=> sprintf( __( 'Remove %s coupon', 'woocommerce' ), $coupon_code ),
);
endforeach;
// Calculate sale discount from product prices
foreach ( WC()->cart->get_cart() as $cart_item ) {
$_product = $cart_item['data'];
if ( $_product->is_on_sale() ) {
$regular_price = (float) $_product->get_regular_price();
$sale_price = (float) $_product->get_sale_price();
if ( $regular_price > 0 && $sale_price > 0 && $regular_price > $sale_price ) {
$item_discount = ( $regular_price - $sale_price ) * $cart_item['quantity'];
$sale_discount += $item_discount;
}
}
}
$total_discount += $sale_discount + $bonus_discount;
?>
<?php if ( $total_discount > 0 ) : ?>
<!-- Ваша экономия -->
<div class="characteristic-item sale-group" id="sale-group">
<p class="montserrat-semibold text-success">
Ваша экономия
<button type="button" class="sale-group-toggle" id="btn-toggle-sale-details" aria-expanded="true" aria-controls="sale-group-details">
<img src="<?php echo esc_url( get_template_directory_uri() . '/assets/icons/ArrowDown.svg' ); ?>" alt="Показать или скрыть скидки">
</button>
</p>
<span class="hr"></span>
<p class="montserrat-medium product-page-price text-success">
-<?php echo matreshka_format_price( $total_discount ); ?>
</p>
</div>
<div class="sale-group-details" id="sale-group-details">
<?php if ( $sale_discount > 0 ) : ?>
<!-- Скидка по акциям -->
<div class="characteristic-item text-success">
<p class="montserrat-medium">Скидка по акциям</p>
<span class="hr"></span>
<p class="montserrat-medium product-page-price text-success">
-<?php echo matreshka_format_price( $sale_discount ); ?>
</p>
</div>
<?php endif; ?>
<?php if ( $promo_discount > 0 ) : ?>
<!-- Промокод применен -->
<div class="characteristic-item text-success">
<p class="montserrat-medium">Промокод применен</p>
<span class="hr"></span>
<p class="montserrat-medium product-page-price text-success">
-<?php echo matreshka_format_price( $promo_discount ); ?>
</p>
</div>
<?php foreach ( $applied_coupons as $applied_coupon ) : ?>
<div class="ms-auto text-end">
<a role="button" aria-label="<?php echo esc_attr( $applied_coupon['remove_label'] ); ?>" href="<?php echo esc_url( $applied_coupon['remove_url'] ); ?>" class="woocommerce-remove-coupon checkout-coupon-row__remove ms-auto" data-coupon="<?php echo esc_attr( $applied_coupon['code'] ); ?>">
Убрать купон
</a>
</div>
<?php endforeach; ?>
<?php endif; ?>
<?php if ( $bonus_discount > 0 ) : ?>
<!-- Списание бонусов -->
<div class="characteristic-item text-success">
<p class="montserrat-medium">Списание бонусов</p>
<span class="hr"></span>
<p class="montserrat-medium product-page-price text-success">
-<?php echo matreshka_format_price( $bonus_discount ); ?>
</p>
</div>
<?php endif; ?>
</div>
<?php endif; ?>
</div>
<?php
// Bonus redemption is calculated server-side again when the cart and order are saved.
$bonus_balance = is_user_logged_in() && function_exists( 'matreshka_get_user_bonuses' ) ? matreshka_get_user_bonuses( get_current_user_id() ) : 0;
$max_redeem_points = $bonus_balance && function_exists( 'matreshka_get_redeemable_bonus_points' ) ? matreshka_get_redeemable_bonus_points( WC()->cart ) : 0;
$redeem_points = WC()->session ? absint( WC()->session->get( 'matreshka_cashback_redeem_points', 0 ) ) : 0;
$redeem_points = min( $redeem_points, $max_redeem_points );
$remaining_points = max( 0, $bonus_balance - $redeem_points );
$redeem_amount = function_exists( 'matreshka_bonus_redemption_amount' ) ? matreshka_bonus_redemption_amount( $redeem_points ) : $redeem_points * 0.1;
?>
<?php if ( $bonus_balance > 0 ) : ?>
<!-- Списание бонусов -->
<section class="matreshka-bonus-redemption <?php echo $redeem_points > 0 ? 'is-open' : ''; ?>" id="matreshka-bonus-redemption">
<button type="button" class="btn btn-white montserrat-medium bonus-redemption__toggle" id="btn-toggle-bonus-redemption" aria-expanded="<?php echo $redeem_points > 0 ? 'true' : 'false'; ?>" aria-controls="bonus-redemption-form">
<img src="<?php echo esc_url( get_template_directory_uri() . '/assets/icons/matreshka.svg' ); ?>" alt="" class="me-3">
<span>
<strong class="montserrat-semibold">Списать бонусы</strong>
<small class="montserrat-medium">Доступно <?php echo esc_html( $bonus_balance ); ?> бонусов (<?php echo wp_kses_post( matreshka_bonuses_to_money( $bonus_balance ) ); ?>)</small>
</span>
<img src="<?php echo esc_url( get_template_directory_uri() . '/assets/icons/AltArrowRight.svg' ); ?>" alt="" class="bonus-redemption__arrow me-1">
</button>
<div class="bonus-redemption__form" id="bonus-redemption-form">
<small class="montserrat-medium bonus-redemption__limit">
Можно списать не более 50% от суммы заказа
</small>
<div class="bonus-redemption__input-row">
<label class="montserrat-medium" for="bonus-redeem-points">Списать бонусов</label>
<div class="bonus-redemption__controls">
<input type="number" id="bonus-redeem-points" class="montserrat-medium" min="1" step="1" max="<?php echo esc_attr( $max_redeem_points ); ?>" value="<?php echo $redeem_points > 0 ? esc_attr( $redeem_points ) : ''; ?>" placeholder="0" <?php disabled( $max_redeem_points <= 0 ); ?>>
<button type="button" class="montserrat-semibold bonus-redemption__all" id="btn-use-all-bonuses" <?php disabled( $max_redeem_points <= 0 ); ?>>Списать все</button>
</div>
</div>
<p class="bonus-redemption__discount montserrat-medium">Скидка <strong id="bonus-redemption-discount" data-bonus-value="0.1"><?php echo wp_kses_post( matreshka_format_price( $redeem_amount ) ); ?></strong></p>
<div class="bonus-redemption-balance-now">
<div class="d-flex">
<img src="<?php echo esc_url( get_template_directory_uri() . '/assets/icons/matreshka.svg' ); ?>" alt="" class="me-2">
<p class="montserrat-medium">Баланс</p>
</div>
<div class="bonus-redemption__balance montserrat-medium">
<span>Сейчас: <strong class="ps-2"><?php echo esc_html( $bonus_balance ); ?></strong></span>
<span>Останется: <strong class="ps-2" id="bonus-points-remaining" data-balance="<?php echo esc_attr( $bonus_balance ); ?>"><?php echo esc_html( $remaining_points ); ?></strong></span>
</div>
</div>
<div class="bonus-redemption__actions">
<button type="button" class="btn btn-red-primary montserrat-semibold" id="btn-apply-bonus-redemption" <?php disabled( $max_redeem_points <= 0 ); ?>>Применить бонусы</button>
<?php if ( $redeem_points > 0 ) : ?>
<button type="button" class="montserrat-medium bonus-redemption__remove" id="btn-remove-bonus-redemption">Не списывать</button>
<?php endif; ?>
</div>
<p class="bonus-redemption__message montserrat-medium" id="bonus-redemption-message" role="status" aria-live="polite"></p>
</div>
</section>
<?php endif; ?>
<!-- Способ получения -->
<?php
$current_shipping = WC()->session ? WC()->session->get( 'matreshka_shipping_type', 'delivery' ) : 'delivery';
$ship_costs = function_exists( 'matreshka_get_shipping_costs' ) ? matreshka_get_shipping_costs() : array( 'delivery' => 389, 'packaging' => 49.99 );
?>
<div class="matreshka-shipping-toggle">
<div class="shipping-toggle-buttons">
<button type="button" class="shipping-toggle-btn montserrat-semibold <?php echo $current_shipping === 'delivery' ? 'active' : ''; ?>" data-method="delivery">
<span class="material-icons-outlined me-1">local_shipping</span>
Доставка
</button>
<button type="button" class="shipping-toggle-btn montserrat-semibold <?php echo $current_shipping === 'pickup' ? 'active' : ''; ?>" data-method="pickup">
<span class="material-icons-outlined me-1">storefront</span>
Самовывоз
</button>
</div>
<!-- Информация о доставке -->
<div class="shipping-delivery-info" style="<?php echo $current_shipping !== 'delivery' ? 'display:none;' : ''; ?>">
<div class="shipping-cost-row montserrat-medium">
<span>Доставка курьером</span>
<span class="shipping-cost-row-price montserrat-semibold"><?php echo wp_kses_post( matreshka_format_price( $ship_costs['delivery'] ) ); ?></span>
</div>
<div class="shipping-cost-row montserrat-medium">
<span>Сборка и упаковка</span>
<span class="shipping-cost-row-price montserrat-semibold"><?php echo wp_kses_post( matreshka_format_price( $ship_costs['packaging'] ) ); ?></span>
</div>
</div>
<!-- Информация о самовывозе: кнопка + стоимость -->
<div class="shipping-pickup-info" style="<?php echo $current_shipping !== 'pickup' ? 'display:none;' : ''; ?>">
<div class="shipping-cost-row montserrat-medium">
<span>Сборка и упаковка</span>
<span class="shipping-cost-row-price montserrat-semibold"><?php echo wp_kses_post( matreshka_format_price( $ship_costs['packaging'] ) ); ?></span>
</div>
<?php wc_get_template( 'cart/pickup-store-selector.php' ); ?>
</div>
</div>
<!-- Способ оплаты -->
<?php
$available_gateways = WC()->payment_gateways ? WC()->payment_gateways->get_available_payment_gateways() : array();
$chosen_gateway_id = WC()->session ? WC()->session->get( 'chosen_payment_method', '' ) : '';
// If none chosen yet, pick the first available
if ( empty( $chosen_gateway_id ) && ! empty( $available_gateways ) ) {
$first = reset( $available_gateways );
$chosen_gateway_id = $first->id;
}
$chosen_gateway_title = '';
$chosen_gateway_icon = '';
if ( ! empty( $available_gateways[ $chosen_gateway_id ] ) ) {
$chosen_gateway_title = $available_gateways[ $chosen_gateway_id ]->get_title();
}
// Icon map — add more IDs when new gateways appear
$gateway_icon_map = array(
'cod' => 'money', // Material icon name
'bacs' => 'credit_card', // Material icon name
);
?>
<button class="btn btn-white montserrat-medium" id="btn-payment-modal">
<div>
<p class="montserrat-semibold">Способ оплаты</p>
<p class="montserrat-medium" id="payment-current-label">
<?php if ( ! empty( $chosen_gateway_title ) ) : ?>
<span class="material-icons-outlined me-1" style="font-size:18px;vertical-align:middle;"><?php echo esc_attr( $gateway_icon_map[ $chosen_gateway_id ] ?? 'payments' ); ?></span>
<?php echo esc_html( $chosen_gateway_title ); ?>
<?php else : ?>
Выберите способ оплаты
<?php endif; ?>
</p>
</div>
<img src="<?php echo get_template_directory_uri(); ?>/assets/icons/AltArrowRight.svg" alt="alt arrow right icon" class="me-1">
</button>
<!-- Модалка: Способ оплаты -->
<?php if ( ! empty( $available_gateways ) ) : ?>
<div class="payment-modal-overlay" id="payment-modal-overlay"></div>
<div class="payment-modal" id="payment-modal">
<div class="payment-modal__header">
<h3 class="montserrat-semibold">Способ оплаты</h3>
<button type="button" class="payment-modal__close" id="payment-modal-close">×</button>
</div>
<div class="payment-modal__body">
<div class="payment-methods-list">
<?php foreach ( $available_gateways as $gateway ) : ?>
<label class="payment-method-item <?php echo $gateway->id === $chosen_gateway_id ? 'active' : ''; ?>">
<div class="payment-method-item__content">
<span class="material-icons-outlined payment-method-icon"><?php echo esc_attr( $gateway_icon_map[ $gateway->id ] ?? 'payments' ); ?></span>
<div class="payment-method-item__text">
<span class="montserrat-semibold"><?php echo esc_html( $gateway->get_title() ); ?></span>
<?php if ( $gateway->get_description() ) : ?>
<span class="montserrat-regular"><?php echo wp_kses_post( $gateway->get_description() ); ?></span>
<?php endif; ?>
</div>
</div>
<input type="radio" name="matreshka_payment_method" value="<?php echo esc_attr( $gateway->id ); ?>" <?php checked( $gateway->id, $chosen_gateway_id ); ?>>
<span class="payment-method-radio"></span>
</label>
<?php endforeach; ?>
</div>
</div>
<div class="payment-modal__footer">
<button type="button" class="btn btn-red-primary montserrat-semibold" id="payment-modal-done">Готово</button>
</div>
</div>
<?php endif; ?>
<!-- Итого и оформление -->
<div class="cart-info-total">
<div class="info-total-price">
<p class="montserrat-semibold">Итого:</p>
<p class="montserrat-bold" id="matreshka-cart-total">
<?php wc_cart_totals_order_total_html(); ?>
</p>
</div>
<div class="wc-proceed-to-checkout">
<?php do_action( 'woocommerce_proceed_to_checkout' ); ?>
</div>
</div>
<?php do_action( 'woocommerce_after_cart_totals' ); ?>
</div>