Создание корзины на php mysql. Настройка страницы корзины в WooCommerce. Полный код работы с данными

Изначально планировал написать про внедрение одного хака на странице корзины WooCommerce, однако позже решил рассказать сразу о нескольких фишках для ее модификации. Хочу заметить, что в данном блоге есть специальный раздел про , т.к. этот вопрос включает в себя множество нюансов. Сегодня статья будет посвящена больше внешнему виду и отображению информации на сайте. Начнем с настроек самого модуля, потом рассмотрим вопрос удаления доставки и заодно изменение шаблона корзины. Думаю, пост пригодится не только новичкам.

На одном из начальных шагов на WooCommerce система создает несколько ключевых страниц (корзину в том числе). Если посмотрите в редакторе ее содержимое, то увидите шорткод .

Здесь же можете изменить название и добавить немного своего текста на страницу. Также задаете МЕТА тег описания и тайтл с помощью .

В настройках модуля есть разные параметры для управления корзиной. Некоторые из них найдете во вкладке «Доставка» — «Варианты доставки».

В опции «Расчеты» можно:

  • включить в корзине калькулятор доставки;
  • спрятать отображение ее стоимости, если еще не заполнен адрес.

При включенном расчете доставки на странице WooCommerce корзины появится соответствующая ссылка. При клике на нее пользователь увидит поля для ввода адреса.

Как удалить доставку со страницы корзины

Собственно, наша следующая задача — удалить на этапе формирования заказа все лишнее, что не касается выбора товаров и их количества. По-умолчанию в настройках плагина, как видите, это не предусмотрено, но в этом есть определенный смысл. Чем меньше разных отвлекающих и запутывающих пользователя факторов будет в вашем интернет-магазине, тем больше вероятность, что покупатель сможет завершить .

Для решения задачи нам понадобится вашей темы (custom-function.php или function.php) следующий хак:

function delshipping_calc_in_cart( $show_shipping ) { if ( is_cart() ) { return false ; } return $show_shipping ; } add_filter( "woocommerce_cart_ready_to_calc_shipping" , "delshipping_calc_in_cart" , 99 ) ;

function delshipping_calc_in_cart($show_shipping) { if(is_cart()) { return false; } return $show_shipping; } add_filter("woocommerce_cart_ready_to_calc_shipping", "delshipping_calc_in_cart", 99);

Шаблон корзины WooCommerce

Все основные файлы шаблона для страницы корзины в WooCommerce находятся в папке cart. Напоминаю, что нужно после того как скопируете папку templates в свою дочернюю тему. По умолчанию директория содержит нескольких файлов:

  • cart-totals.php
  • cross-sells.php
  • cart-empty.php
  • cart-item-data.php
  • cart-shipping.php
  • mini-cart.php
  • proceed-to-checkout-button.php
  • shipping-calculator.php

Каждый из них отвечает за определенные функции, например, в файле cross-sells.php задается отображение кросс продаж, в cart-empty.php — выполняется обработка пустой корзины и т.п. Вы можете изменить вывод всех элементов страницы так, как вам это нужно. Хотя некоторые правки принято делать через хаки/сниппеты как например в посте про .

Давайте рассмотрим один пример дабы немного прояснить логику работы. После внедрения хака с предыдущего шага настройки WooCommerce корзины мы избавились от доставки, но страница все еще выглядит немного странно.

Если внимательно изучить файлы шаблона корзины, то увидите, что за отображение блока под товарами отвечает строка:

add_action("woocommerce_cart_collaterals", "woocommerce_cross_sell_display"); add_action("woocommerce_cart_collaterals", "woocommerce_cart_totals", 10);

Теперь, по сути, у вас есть 3 варианта чтобы все это скрыть:

  • закомментировать строку с do_action в cart.php;
  • использовать функцию remove_action в custom-function.php (или function.php);
  • подправить файлы cross-sells.php и cart-totals.php, которые непосредственно вызываются данными функциями.

После внедрения любого из этих способов будет скрыт не только блок итоговый цены, но и ссылка на оплату заказа. Поэтому вам нужно вернуть на страницу корзины WooCommerce соответствующую кнопку. Добавляете ее в cart.php после формы:

Это лишь один из примеров работы с шаблоном, надеюсь, суть вы уловили. В принципе, есть 2 варианта его модификации — в файлах напрямую (легче и нагляднее), либо работа через хуки и функции remove_action / add_action (вроде как, считается правильнее и более гибко). Какой бы вариант вы не выбрали, помните, что правки нужно вносить в копию макета магазина в дочерней теме.

Хак для купонов

Если вы используете промокоды в магазине то можно добавить отображение новой цены напротив каждой позиции. Найденный сниппет имеет вид:

add_filter( "woocommerce_cart_item_subtotal" , "bbloomer_if_coupon_slash_item_subtotal" , 99 , 3 ) ; function bbloomer_if_coupon_slash_item_subtotal( $subtotal , $cart_item , $cart_item_key ) { global $woocommerce ; // Note: use your own coupon code here $coupon_code = "barmada" ; if ( $woocommerce -> cart -> has_discount ( $coupon_code ) ) { // Note: apply your own coupon discount multiplier here // In this case, it"s a 99% discount, hence I multiply by 0.01 $newsubtotal = wc_price( $cart_item [ "data" ] -> get_price () * 0.01 ) ; $subtotal = sprintf ( "%s %s" , $subtotal , $newsubtotal ) ; } return $subtotal ; }

add_filter("woocommerce_cart_item_subtotal", "bbloomer_if_coupon_slash_item_subtotal", 99, 3); function bbloomer_if_coupon_slash_item_subtotal($subtotal, $cart_item, $cart_item_key){ global $woocommerce; // Note: use your own coupon code here $coupon_code = "barmada"; if ($woocommerce->cart->has_discount($coupon_code)) { // Note: apply your own coupon discount multiplier here // In this case, it"s a 99% discount, hence I multiply by 0.01 $newsubtotal = wc_price($cart_item["data"]->get_price() * 0.01); $subtotal = sprintf("%s %s", $subtotal, $newsubtotal); } return $subtotal; }

Если код вам не совсем понятен загляните в статью про , где я описал его чуть подробнее (в самом конце заметки).

Если будут еще какие-то вопросы / дополнения по настройке корзины WooCommerce и модификации соответствующей страницы на сайте, пишите в комментариях.

Здравствуйте. Прошу помощи в создании очень простой корзины товаров. Есть вывод товаров с базы данных, как сделать корзину товаров. Допустим к товарам добавить кнопку "В корзину" при нажатии которой будет добавляться товар в корзину. Сохранение корзины в бд не нужно. Нужна корзина через куки или сессию. Сам сайт: http://host1649597.hostland.pro/category/muzhskaya-parfyumeriya/ Нужна максимально простая, главное что-бы работала)

14 ответов

Para bellum

Самое простое:

class Cart { /** * Данные корзины * * @var array */ protected $data = ; /** * Имя cookie с корзиной * * @var string */ protected $name = "cart"; public function __construct() { $this->decode(); } /** * Добавление ID товара * * @param integer $id * @return void */ public function set($id) { if (!in_array($id, $this->data)) { $this->data = (int) $id; } } /** * Получение массива ID товаров * * @return array */ public function get() { return $this->data; } /** * Удаление товара из корзины * * @param integer $id * @return void */ public function delete($id) { if (false !== $key = array_search($id, $this->data)) { unset($this->data[$key]); } } /** * Получение корзины из cookie * * @return void */ protected function decode() { $data = $_COOKIE[$this->name] ?? ""; if ($data = json_decode($data, true)) { $this->data = array_filter($data, "is_int"); } } /** * Сохранение корзины в cookie * * @return void */ public function save() { setcookie($this->name, json_encode($this->

Использование:

# Добавление ID товара в корзину $cart = new Cart; $cart->set(1); $cart->save(); # Удаление ID товара из корзины $cart = new Cart; $cart->delete(1); $cart->save(); # Получение ID товаров из корзины $cart = new Cart; $ids = $cart->get();

Пара уточнений: 1) Если есть инструменты для работы с запросом и ответом (Request и Response), то напрямую к $_COOKIE лучше не обращаться и setcookie не вызывать, а использовать те инструменты.2) Будет работать только в PHP 7. Для более ранних версий напишите 66 так:

$data = isset($_COOKIE[$this->name]) ? $_COOKIE[$this->name] : "";

М_Сергей

Писать коды не буду, но принцип должен быть следующий. Кнопка "Добавить в корзину" должна быть либо кнопкой формы либо картинкой ссылки, в зависимости от того каким методом будут передаваться данные на сервер POST или GET. В этих данных должны быть ID товара и допустим его кол-во, т.е. два значения. На сервере скрипт обрабатывает эти два значения и помещает в суперглобальный массив SESSION. А уж из него Вы черпаете информацию о добавленных товарах в самой корзине. На основе имеющихся данных в массиве SESSION можно стилизовать кнопку "Корзина" (подсветить там ее и написать сколько товаров в ней лежит...)

Ну вот код кнопки

echo "

NameCodePriceBranddescription
". $row["name"]."". $row["code"]."". $row["price"]."". $row["brand"]."". $row["description"]."Add

";

а именно

Add

Para bellum

Что-то сложно не могу понять Код, что я привёл, сохраните в отдельный файл, затем подключайте его там, где нужно использовать корзину. Как использовать, я сказал после подписи "Использование:". Ничего сложного.добавление в корзину тут то я и бессилен А для кого я готовый код корзины написал? Например, сохранили тот код в файле "Cart.php". Затем, в add_to_trash.php (лучше в add_to_cart.php) пишем:

Корзина .korzina { margin-left: 200px; background: black; width: 200px; height: 200px; color: white; overflow: scroll; } SAMSUNG(250$) NOKIA(150$) APPLE(300$) MOTOROLA(400$) TESLA(500$)

вот вам мой вариант))) у Para bellum правильнее! - мой просто для теста))

посмотрите какая у вас версия php в новой -можно создавать массив $a = ; а старой $a = array();

Para bellum

посмотрите какая у вас версия php У него, наверное, 5.3 ещё. Parse error: syntax error, unexpected "[" in cart.php on line 9 Если нужно, чтобы работало в старинных версиях, вот: