• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Важно! Совмещение корзины и оплаты в "Оформление заказа"

bodiaka

Новичок
Ну тогда для Вас подниму и разовью тему :)

Совмещение корзины и оплаты - WP 4.0, WC 2.2
После последнего апа Wordpress 4.0 и Woocommerce 2.2 боялся что все слетит, и готовился к наихудшему. Тем не менее, все осталось работать, проблемы возникли только с потерей переводов, но они решаются достаточно легко.
Тем не менее, на работу я был настроен, поэтому кое-чего решил поменять. А именно - решил все-таки вернуться к родной доставке. Во-первых, не везде удобно отображались сведения о доставке, с заказами работать не очень удобно. Во-вторых, были лишние правки в ядре. В-третьих, в новых версиях стало попроще в плане совместимости: стало работать то, что раньше не хотело.

В общем, вернулся я к родной доставке. Включил ее, настроил интересующие меня варианты. По факту, у меня включен самовывоз, а также "Единая ставка", в которую я закинул кучу нужных вариантов.
Цену в зависимости от доставки я не меняю: стоимость доставки покупатель оплачивает перевозчику, сколько она выйдет - я не знаю. Но глаза мозолили ярлыки "Бесплатно!", их убил небольшим кодом (добавляем в functions.php)
PHP:
/**
* Переписываем функцию формирования полной лейбы для методов доставки с ценой чтобы не выводилась надпись (Бесплатно!)
**/
add_filter ('woocommerce_cart_shipping_method_full_label', 'wc_cart_totals_shipping_method_label_nofree', 10, 2);
function wc_cart_totals_shipping_method_label_nofree( $label, $method ) {
    $label = $method->label;

    if ( $method->cost > 0 ) {
        if ( WC()->cart->tax_display_cart == 'excl' ) {
            $label .= ': ' . wc_price( $method->cost );
            if ( $method->get_shipping_tax() > 0 && WC()->cart->prices_include_tax ) {
                $label .= ' <small>' . WC()->countries->ex_tax_or_vat() . '</small>';
            }
        } else {
            $label .= ': ' . wc_price( $method->cost + $method->get_shipping_tax() );
            if ( $method->get_shipping_tax() > 0 && ! WC()->cart->prices_include_tax ) {
                $label .= ' <small>' . WC()->countries->inc_tax_or_vat() . '</small>';
            }
        }
    } elseif ( $method->id !== 'free_shipping' ) {
        $label .= ' ';
    }
     return $label;
}
Мой хитрый код для добавления своего поля "доставка" пока больше не нужен (но может еще когда пригодится? :) ), поэтому мы его смело убиваем.

Захотелось мне глобально "уплотнить" оформление заказа, поэтому начнем с того, что всунем родные радиобатоны доставки рядышком с полями, которые пользователь заполняет при оформлении заказа.

Берем файлик \wp-content\plugins\woocommerce\templates\checkout\review-order.php , копируем его в wp-content\themes\wootique-child\woocommerce\checkout\ (папка с темой)
удаляем оттуда код <?php wc_cart_totals_shipping_html(); ?> (после <?php do_action( 'woocommerce_review_order_before_shipping' ); ?>)


Берем файлик \wp-content\plugins\woocommerce\templates\checkout\form-shipping.php , копируем в wp-content\themes\wootique-child\woocommerce\checkout\
вставляем туда код <h3>Способ доставки</h3> <?php wc_cart_totals_shipping_html(); ?> (после <?php do_action( 'woocommerce_before_order_notes', $checkout ); ?>)

Теперь выбор доставки переехал, но остались кругленькие маркеры. Уберем их с помощью стилевых свойств (custom.css):
#shipping_method {list-style: none; margin: 0 0 0.9em 0; }

Внизу остались только варианты оплаты, поэтому надо переименовать заголовок.
wp-content\themes\wootique-child\woocommerce\checkout\form-checkout.php (скопировал)
Находим строку
<h3 id="order_review_heading"><?php _e( 'Your order', 'woocommerce' ); ?></h3>
И меняем на
<h3 id="order_review_heading">Способ оплаты:</h3>
Можно было бы сделать и через локализацию, но тогда потянутся другие места, где используется данная фраза.

Дальше, немного уплотним кусок старой "корзины", убрав оттуда табличку с расчетом суммы заказа.
Идем в \wp-content\themes\wootique-child\woocommerce\cart\cart.php (скопированный), и убираем внизу <?php woocommerce_cart_totals(); ?> (после <?php do_action( 'woocommerce_cart_collaterals' ); ?>).
Таблицу убрали, но общую сумму заказа надо ведь где-нибудь видеть! Поэтому внизу, после таблички с товарами добавим еще одну строчку, вставив перед do_action( 'woocommerce_cart_contents' ); следующий код:
HTML:
  ?><tr>
  <td>&nbsp;</td>
  <td>&nbsp;</td>
  <td>&nbsp;</td>
  <td>&nbsp;</td>
  <td><b>Общая сумма:</b></td>
  <td><?php wc_cart_totals_subtotal_html(); ?></td>
  </tr><?php

К чему все это? У меня нет купонов, нет суммы доставки, налогов и других составляющих суммы заказа, поэтому длинные таблицы с расчетами всего этого мне не нужны. Просто избавимся от них, сделав страницу лаконичне и проще.

Ну и да, как обычно правим локализацию:

Локализация woocommerce: (\wp-content\languages\plugins\woocommerce-ru_RU.po)
Shipping and Handling вместо «Доставка и обработка» сделал «Выберите способ доставки:»
Billingaddress
вместо «Адрес оплаты» сделал «Адрес доставки» (заголовок в e-mailсообщении)

Локализация saphali_wc_lite : (\wp-content\plugins\saphali-woocommerce-lite\languages\woocommerce-ru_RU.po)
BillingAddress вместо «Реквизиты для оплаты» сделал «Адрес доставки
Billing &amp; Shipping вместо «Платежные данные и доставка» сделал «Реквизиты покупателя» (надпись в корзине)

В результате имеем вот что:
Посмотреть вложение 952

http://akip.com.ua/checkout/


такой вопрос...а если тема другая..у меня стандартная Twenty Twelve и там в папке темы нету woocommerce\checkout\ (папка с темой)....куда тогда забрасывать review-order.php...?...хелп!
 

Stork.71

Гуру
Местный
Ну, так включите ХОТЯ БЫ ОДИН способ оплаты!!!
З,Ы.: Вы издеваетесь? В первом посте - 3 одинаковых полноразмерных скриншота одной страницы. Во втором - вложенный pdf в перевернутом виде. Нормально заскринить и выложить сложно?
 

Stork.71

Гуру
Местный
такой вопрос...а если тема другая..у меня стандартная Twenty Twelve и там в папке темы нету woocommerce\checkout\ (папка с темой)....куда тогда забрасывать review-order.php...?...хелп!
Вам надо СОЗДАТЬ эту папку. По умолчанию эти файлы лежать просто в файлах плагина woocommerce. Но если Вы стоздаете папку woocommerce в теме, то сайт начинает подтягивать шаблоны из этой папки.
 

bodiaka

Новичок
Вам надо СОЗДАТЬ эту папку. По умолчанию эти файлы лежать просто в файлах плагина woocommerce. Но если Вы стоздаете папку woocommerce в теме, то сайт начинает подтягивать шаблоны из этой папки.
Спасибо!..все практически получилось..единственное непонятно на каком этапе пропало вот это...и как от него избавится
 

Вложения

  • scrin.gif
    scrin.gif
    20.7 KB · Просмотры: 72
  • scrin2.gif
    scrin2.gif
    8.6 KB · Просмотры: 71

Stork.71

Гуру
Местный
Спасибо!..все практически получилось..единственное непонятно на каком этапе пропало вот это...и как от него избавится
Ваши слова можно трактовать по-разному, поэтому распишите более подробно и точно - у кого что куда пропало? Как у Вас было, как стало, как должно быть?
 

bodiaka

Новичок
Ваши слова можно трактовать по-разному, поэтому распишите более подробно и точно - у кого что куда пропало? Как у Вас было, как стало, как должно быть?
точно блин..извините))....у вас пропало...у меня осталось как на скриншоте....хотя делал все по мануалу....хочу что бы пропало
 

bodiaka

Новичок
неа..вернее как...делал все как в инструкциях по вашей ссылке..но остаточным явлением после способа оплаты осталась табличка с товаром и сумой покупки....как бы ее убрать и привести к виду как у вас на скриншоте...тоисть..заголовок "Способ оплаты"..и сразу радиобутоны с выбором?
 

Stork.71

Гуру
Местный
см. пост 125....файл scrin.gif
Ага, понял, я почему-то забыл описать часть своих действий. Исправился уже. :)

Берем файлик \wp-content\plugins\woocommerce\templates\checkout\review-order.php , копируем его в wp-content\themes\wootique-child\woocommerce\checkout\ (папка с темой)
вырезаем оттуда код <?php wc_cart_totals_shipping_html(); ?> (после <?php do_action( 'woocommerce_review_order_before_shipping' ); ?>) он нам пригодится в другом месте
После этого можно удалить большой кусок кода - итоговую таблицу <table class="shop_table"> (заканчивая закрывающим тегом </table> ). Она нам не понадобится, так как мы все это видим выше.
 

bodiaka

Новичок
Ага, понял, я почему-то забыл описать часть своих действий. Исправился уже. :)

Берем файлик \wp-content\plugins\woocommerce\templates\checkout\review-order.php , копируем его в wp-content\themes\wootique-child\woocommerce\checkout\ (папка с темой)
вырезаем оттуда код <?php wc_cart_totals_shipping_html(); ?> (после <?php do_action( 'woocommerce_review_order_before_shipping' ); ?>) он нам пригодится в другом месте
После этого можно удалить большой кусок кода - итоговую таблицу <table class="shop_table"> (заканчивая закрывающим тегом </table> ). Она нам не понадобится, так как мы все это видим выше.

СПАСИБО!...теперь то что доктор прописал)...хотя стремно было эту таблицу удалять....весь код что был в файлике фактически)))
 

Stork.71

Гуру
Местный
родной код остался в родном файле. Вы ж скопировали его в файлы темы, я надесюь?
 

geozavl

Новичок
Добрый день!

Stork.71, большое Вам спасибо за всю эту ветку!

После обновления WC с 2.1 до 2.3.5, как и следовало ожидать, на странице опять вылезла кнопка "Перейти к оплате".

Искомый код в cart.php исчез. Я использую тему Weaver II, поэтому правка css, приведённая в ветке, скорее всего не для меня. Пришлось искать по всему каталогу плагина с использованием ключевого текста "Proceed to Checkout".

Была найдена строка № 1132 (если использовать Notepad++) в файле wp-content/plugins/woocommerce/includes/wc-template-functions.php

Код следующий:
PHP:
<a href="<?php echo $checkout_url; ?>" class="checkout-button button alt wc-forward"><?php _e( 'Proceed to Checkout', 'woocommerce' ); ?></a>

Строчку удалил, кнопка снова исчезла.

Хотелось бы, конечно, сделать как-то это всё через дочернюю тему и хуки. Непонятно пока только как. Вот тут я нашёл способ, как с помощью хуков превратить woocommerce в обычный каталог, отключив все кнопки, которые только можно.

А в файле с говорящим названием wp-content/plugins/woocommerce/includes/wc-template-hooks.php, возможно со временем удастся найти нужный хук.

Осталось найти время со всем этим поэкспериментировать....
 
Последнее редактирование:

bessel

Новичок
Осталось найти время со всем этим поэкспериментировать....
Далек от темы работы с плагинами, но решил проблему следующим образом.
В озвученном выше файле есть функция woocommerce_proceed_to_checkout.
Где-то в недрах добавляется хук : add_action.
Добавил в functions.php темы сниппет:
remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 10 );
Кнопка исчезла.
 

ryder

Новичок
Stork.71, большое спасибо за столь подробный гайд, все работает как часы.
Но возникла небольшая проблема с купонами, которую вы не затронули, потому что в вашем магазине купоны не используются.
Суть в следующем.
Совмещенная страница корзины и оформления заказа у меня выглядит следующим образом. Левый блок - [woocommerce_cart], правый - [woocommerce_checkout].
cart.jpg

Если ввести код купона и нажать "применить", страница перезагружается и выглядит так. Пока все ок.
coupon-enabled.jpg

Дальше начинается суть проблемы. Если попытаться купон убрать (нажать соответствующую ссылку), то процесс удаления происходит без перезагрузки страницы, и после удаления все выглядит так:
coupon-removed.jpg

На деле купон удален, но в левой части страницы он все еще висит как примененный, также небольшой косяк в том, что сообщение об удалении купона появляется в правой части страницы (она же [woocommerce_checkout]), а не в левой, что было бы предпочтительнее.
Проблема вывода сообщения не в том месте остро не стоит. В принципе, можно просто отключить вывод этих сообщений, и без них ок.

Корень проблемы не удаляющейся строчки купона я вижу в том, что страница при удалении купона не перезагружается, а обновляется в фоновом режиме, причем обновляется исключительно правая часть [woocommerce_checkout], из-за чего в [woocommerce_cart] изменения не отражаются.
Пробовал отключить ajax при удалении купона правкой файла woocommerce/includes/class-wc-ajax.php. Правил строку 'remove_coupon' => true на 'remove_coupon' => false , но безрезультатно, все равно в фоновом режиме обновляется.

Есть идеи, как решить эту проблему? Буду благодарен за помощь.
 
Последнее редактирование:

Stork.71

Гуру
Местный
А если нажать кнопку "обновить корзину"?
Как вообще это работает при несовмещенной корзине?
Чтобы пофиксить надо скорее всего глубже копаться. Сейчас на это нет времени и желания :) Если найдете решение - отпишитесь пожалуйста.
 

ryder

Новичок
А если нажать кнопку "обновить корзину"?
Как вообще это работает при несовмещенной корзине?
Чтобы пофиксить надо скорее всего глубже копаться. Сейчас на это нет времени и желания :) Если найдете решение - отпишитесь пожалуйста.
Если после удаления купона нажать "обновить корзину", то после обновления становится как и должно быть, купона нет.

Решение нашел, но частичное. Если добавить вот эту конструкцию в functions.php,
PHP:
function disable_checkout_script(){
    wp_dequeue_script( 'wc-checkout' );
}
add_action( 'wp_enqueue_scripts', 'disable_checkout_script' );
то купон удаляется нормально, как должен.
Эта функция отключает аякс на странице чекаута. Раньше страница при удалении купона не перезагружалась, а сейчас перезагружается. Как я и предполагал, проблема этим решается.
Но дело в том, что эта функция отключает вообще весь аякс на странице, в частности, проверку введенных в форму заказа данных. А эту функцию я хочу сохранить. Поэтому буду копать дальше, хочу найти способ отключить аякс только при добавлении/удалении купона.

Будет результат - обязательно напишу решение ;)
 
  • Like
Реакции: D&B
Сверху Снизу