Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Важно!Совмещение корзины и оплаты в "Оформление заказа"
Совмещение корзины и оплаты - 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' ); следующий код:
К чему все это? У меня нет купонов, нет суммы доставки, налогов и других составляющих суммы заказа, поэтому длинные таблицы с расчетами всего этого мне не нужны. Просто избавимся от них, сделав страницу лаконичне и проще.
Ну и да, как обычно правим локализацию:
Локализация 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 & Shipping вместо «Платежные данные и доставка» сделал «Реквизиты покупателя» (надпись в корзине)
такой вопрос...а если тема другая..у меня стандартная Twenty Twelve и там в папке темы нету woocommerce\checkout\ (папка с темой)....куда тогда забрасывать review-order.php...?...хелп!
Ну, так включите ХОТЯ БЫ ОДИН способ оплаты!!!
З,Ы.: Вы издеваетесь? В первом посте - 3 одинаковых полноразмерных скриншота одной страницы. Во втором - вложенный pdf в перевернутом виде. Нормально заскринить и выложить сложно?
такой вопрос...а если тема другая..у меня стандартная Twenty Twelve и там в папке темы нету woocommerce\checkout\ (папка с темой)....куда тогда забрасывать review-order.php...?...хелп!
Вам надо СОЗДАТЬ эту папку. По умолчанию эти файлы лежать просто в файлах плагина woocommerce. Но если Вы стоздаете папку woocommerce в теме, то сайт начинает подтягивать шаблоны из этой папки.
Вам надо СОЗДАТЬ эту папку. По умолчанию эти файлы лежать просто в файлах плагина woocommerce. Но если Вы стоздаете папку woocommerce в теме, то сайт начинает подтягивать шаблоны из этой папки.
Ваши слова можно трактовать по-разному, поэтому распишите более подробно и точно - у кого что куда пропало? Как у Вас было, как стало, как должно быть?
Ваши слова можно трактовать по-разному, поэтому распишите более подробно и точно - у кого что куда пропало? Как у Вас было, как стало, как должно быть?
неа..вернее как...делал все как в инструкциях по вашей ссылке..но остаточным явлением после способа оплаты осталась табличка с товаром и сумой покупки....как бы ее убрать и привести к виду как у вас на скриншоте...тоисть..заголовок "Способ оплаты"..и сразу радиобутоны с выбором?
Ага, понял, я почему-то забыл описать часть своих действий. Исправился уже.
Берем файлик \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> ). Она нам не понадобится, так как мы все это видим выше.
Ага, понял, я почему-то забыл описать часть своих действий. Исправился уже.
Берем файлик \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> ). Она нам не понадобится, так как мы все это видим выше.
После обновления 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, возможно со временем удастся найти нужный хук.
Осталось найти время со всем этим поэкспериментировать....
Далек от темы работы с плагинами, но решил проблему следующим образом.
В озвученном выше файле есть функция woocommerce_proceed_to_checkout.
Где-то в недрах добавляется хук : add_action.
Добавил в functions.php темы сниппет:
remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 10 );
Кнопка исчезла.
Stork.71, большое спасибо за столь подробный гайд, все работает как часы.
Но возникла небольшая проблема с купонами, которую вы не затронули, потому что в вашем магазине купоны не используются.
Суть в следующем.
Совмещенная страница корзины и оформления заказа у меня выглядит следующим образом. Левый блок - [woocommerce_cart], правый - [woocommerce_checkout].
Если ввести код купона и нажать "применить", страница перезагружается и выглядит так. Пока все ок.
Дальше начинается суть проблемы. Если попытаться купон убрать (нажать соответствующую ссылку), то процесс удаления происходит без перезагрузки страницы, и после удаления все выглядит так:
На деле купон удален, но в левой части страницы он все еще висит как примененный, также небольшой косяк в том, что сообщение об удалении купона появляется в правой части страницы (она же [woocommerce_checkout]), а не в левой, что было бы предпочтительнее.
Проблема вывода сообщения не в том месте остро не стоит. В принципе, можно просто отключить вывод этих сообщений, и без них ок.
Корень проблемы не удаляющейся строчки купона я вижу в том, что страница при удалении купона не перезагружается, а обновляется в фоновом режиме, причем обновляется исключительно правая часть [woocommerce_checkout], из-за чего в [woocommerce_cart] изменения не отражаются.
Пробовал отключить ajax при удалении купона правкой файла woocommerce/includes/class-wc-ajax.php. Правил строку 'remove_coupon' => true на 'remove_coupon' => false , но безрезультатно, все равно в фоновом режиме обновляется.
Есть идеи, как решить эту проблему? Буду благодарен за помощь.
А если нажать кнопку "обновить корзину"?
Как вообще это работает при несовмещенной корзине?
Чтобы пофиксить надо скорее всего глубже копаться. Сейчас на это нет времени и желания Если найдете решение - отпишитесь пожалуйста.
А если нажать кнопку "обновить корзину"?
Как вообще это работает при несовмещенной корзине?
Чтобы пофиксить надо скорее всего глубже копаться. Сейчас на это нет времени и желания Если найдете решение - отпишитесь пожалуйста.
Если после удаления купона нажать "обновить корзину", то после обновления становится как и должно быть, купона нет.
Решение нашел, но частичное. Если добавить вот эту конструкцию в functions.php,
PHP:
function disable_checkout_script(){
wp_dequeue_script( 'wc-checkout' );
}
add_action( 'wp_enqueue_scripts', 'disable_checkout_script' );
то купон удаляется нормально, как должен.
Эта функция отключает аякс на странице чекаута. Раньше страница при удалении купона не перезагружалась, а сейчас перезагружается. Как я и предполагал, проблема этим решается.
Но дело в том, что эта функция отключает вообще весь аякс на странице, в частности, проверку введенных в форму заказа данных. А эту функцию я хочу сохранить. Поэтому буду копать дальше, хочу найти способ отключить аякс только при добавлении/удалении купона.