Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Важно!Совмещение корзины и оплаты в "Оформление заказа"
А, понял в чем дело. При добавлении из карточки товара страница обновляется, соответственно идет заново проверка условий на показывание/непоказывание кнопки. При добавлении со страницы каталога запускается скрипт и страница не обновляется, соответственно и вкладка не появляется. Как с этим правильно бороться - не знаю, мне в голову не приходит, то есть скорее всего не очень просто
Просто у меня добавление в корзину из каталога скрыто, поэтому такой проблемы не возникает.
Я все сделал как написано, все работает но как и у автора есть проблема. Если в корзине удалить товар то это приводит к ошибке в Хроме: На этой странице обнаружена циклическая переадресация в Мозиле: Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится. Я думаю это серьезный косяк, надо как то исправить. Ведь покупатель у нас может передумать и удалить некоторые товары которые он выбрал. Есть у кого мысли по этому поводу?
При оплате Робокассой в режиме тестирования такая же проблема при нажатии Отказ от платежа.
Решил проблему как писали в посте #8 с помощью плагина WooCommerce Direct Checkout переадресовал на страницу Оплата, а на странице Оплата добавил шорткод Корзины. Теперь все удаляется из корзины и Робокасса работает
Да кстати шорткод Оплаты нужно также на страницу Корзина, иначе при нажатии в меню корзина будет отсутствовать кнопка перейти к оплате). Получается что у нас и в корзине и в оплате везде одинаковая форма. Я протестировал все работает товар с корзины удаляется, платеж через Робокассу отменяется. Вариант рабочий можно пользоваться.
В целом все утраивает - не планирую таких глобальных изменений, перечитала все комменты, но вот где поменять надпись на странице "Оплата" - "Детали оплаты" на "Оформить заказ" так и не поняла.
В целом все утраивает - не планирую таких глобальных изменений, перечитала все комменты, но вот где поменять надпись на странице "Оплата" - "Детали оплаты" на "Оформить заказ" так и не поняла.
Качаем Рoedit http://poedit.net/download.php#win32 в папке i18n/languages плагина woocommerce находим файл woocommerce-ru_RU.po открываем его с помощью Рoedit далее ctrl+f в поле поиска вбиваем Billing Address находим его и в низу в окне меняем "Детали оплаты" на "Контактные данные" далее сохранить и файл woocommerce-ru_RU.po и в месте с файлом woocommerce-ru_RU.mo поновой залить на сайт в тоже место откуда взяли.
Решил проблему как писали в посте #8 с помощью плагина WooCommerce Direct Checkout переадресовал на страницу Оплата, а на странице Оплата добавил шорткод Корзины. Теперь все удаляется из корзины и Робокасса работает
Если Вас устраивает, что вместо просто добавления в корзину у вас идет еще и переадресация на страницу корзины - то однозначно WooCommerce Direct Checkout это абсолютно правильное решение, а главное - 100% рабочее (вроде негативных отзывов не было) решение, и не надо ни с чем заморачиваться и сочинять велосипеды!
Правда все же интересно, почему с Direct Checkout все работает, а при способе как у меня - не очень. Мне немного не хватает понимания того, как работает движок, что куда он кидает и почему начинается циклическая переадресация. Надеюсь, позже разберусь.
Пытаюсь справиться с багом циклической переадресации при попадании на \checkout с пустой корзиной. Работает это как: при переходе на чекаут проверяется корзина, если она пуста - идет редирект на страницу корзины, на которой уже выводится содержание корзины, но так как она пуста, то выводится сообщение "корзина пустая....." В моей же модификации код опять натыкается на чекаут и зацикливается. Логично предположить, что вылечить поможет убирание редиректа, правда найти его непросто
После долгих поисков нашел файлик \woocommerce\includes\wc-template-functions.php и в нем функцию wc_template_redirect(), которая в числе прочего содержит конструкцию, отвечающая за редирект в данном случае:
Код:
// When on the checkout with an empty cart, redirect to cart page
elseif ( is_page( wc_get_page_id( 'checkout' ) ) && sizeof( WC()->cart->get_cart() ) == 0 && empty( $wp->query_vars['order-pay'] ) && ! isset( $wp->query_vars['order-received'] ) ) {
wp_redirect( get_permalink( wc_get_page_id( 'cart' ) ) );
exit;
}
Удалил этот кусок и - о чудо! - все заработало! Редирект не происходит, но поскольку у нас страница чекаут выглядит как [woocommerce_cart]
[woocommerce_checkout] , то в итоге от первой части [woocommerce_cart] подтягивается сообщение о пустой корзине, а вторая остается пустой - то есть страничка получается красивенькая.
Можно было бы оставить это в качестве окончательного решения проблемы, и пока что я так и сделал, но не забываем, что мы редактируем файлы ядра, а значит потеряем это все при первом же обновлении.
Хочется сделать все через functions.php.
Полностью наш кусок кода, задающий всякие-разные редиректы в wc-template-functions.php, выглядит так:
PHP:
/**
* Handle redirects before content is output - hooked into template_redirect so is_page works.
*
* @return void
*/
function wc_template_redirect() {
global $wp_query, $wp;
// When default permalinks are enabled, redirect shop page to post type archive url
if ( ! empty( $_GET['page_id'] ) && get_option( 'permalink_structure' ) == "" && $_GET['page_id'] == wc_get_page_id( 'shop' ) ) {
wp_safe_redirect( get_post_type_archive_link('product') );
exit;
}
// When on the checkout with an empty cart, redirect to cart page
elseif ( is_page( wc_get_page_id( 'checkout' ) ) && sizeof( WC()->cart->get_cart() ) == 0 && empty( $wp->query_vars['order-pay'] ) && ! isset( $wp->query_vars['order-received'] ) ) {
wp_redirect( get_permalink( wc_get_page_id( 'cart' ) ) );
exit;
}
// Logout
elseif ( isset( $wp->query_vars['customer-logout'] ) ) {
wp_redirect( str_replace( '&', '&', wp_logout_url( get_permalink( wc_get_page_id( 'myaccount' ) ) ) ) );
exit;
}
// Redirect to the product page if we have a single product
elseif ( is_search() && is_post_type_archive( 'product' ) && apply_filters( 'woocommerce_redirect_single_search_result', true ) && $wp_query->post_count == 1 ) {
$product = get_product( $wp_query->post );
if ( $product->is_visible() ) {
wp_safe_redirect( get_permalink( $product->id ), 302 );
exit;
}
}
// Ensure payment gateways are loaded early
elseif ( is_add_payment_method_page() ) {
WC()->payment_gateways();
}
// Checkout pages handling
elseif ( is_checkout() ) {
// Buffer the checkout page
ob_start();
// Ensure gateways and shipping methods are loaded early
WC()->payment_gateways();
WC()->shipping();
}
}
add_action( 'template_redirect', 'wc_template_redirect' );
Конструкция add_action( 'template_redirect', 'wc_template_redirect' ) как бы намекает, что это все можно легко поменять через functions.php.
Попробовал добавить в functions.php следующий код:
PHP:
/* Переопределим функцию, отвечающую за редиректы, чтобы убрать из нее редирект из чекаута при пустой корзины (убираем зацикливание) */
/* оригинал функции - wc-template-functions.php */
/**
* Handle redirects before content is output - hooked into template_redirect so is_page works.
*
* @return void
*/
function my_wc_template_redirect() {
global $wp_query, $wp;
// When default permalinks are enabled, redirect shop page to post type archive url
if ( ! empty( $_GET['page_id'] ) && get_option( 'permalink_structure' ) == "" && $_GET['page_id'] == wc_get_page_id( 'shop' ) ) {
wp_safe_redirect( get_post_type_archive_link('product') );
exit;
}
// Logout
elseif ( isset( $wp->query_vars['customer-logout'] ) ) {
wp_redirect( str_replace( '&', '&', wp_logout_url( get_permalink( wc_get_page_id( 'myaccount' ) ) ) ) );
exit;
}
// Redirect to the product page if we have a single product
elseif ( is_search() && is_post_type_archive( 'product' ) && apply_filters( 'woocommerce_redirect_single_search_result', true ) && $wp_query->post_count == 1 ) {
$product = get_product( $wp_query->post );
if ( $product->is_visible() ) {
wp_safe_redirect( get_permalink( $product->id ), 302 );
exit;
}
}
// Ensure payment gateways are loaded early
elseif ( is_add_payment_method_page() ) {
WC()->payment_gateways();
}
// Checkout pages handling
elseif ( is_checkout() ) {
// Buffer the checkout page
ob_start();
// Ensure gateways and shipping methods are loaded early
WC()->payment_gateways();
WC()->shipping();
}
}
remove_action('template_redirect', 'wc_template_redirect');
add_action('template_redirect', 'my_wc_template_redirect');
Но, к сожалению, такой код не работает. Казалось бы (как мне кажется), он должен сначала убирать родную функцию wc_template_redirect, а потом добавлять мою новую my_wc_template_redirect. Но почему-то, старая функция остается, зацикливание не исчезает.
Никто не знает, в чем может быть ошибка?
Ап. Сам же и нашел решение.
Проблема была в том, что у меня дочерняя тема, поэтому мой functions.php грузится раньше, чем все остальное, и вешать нужные переопределения функций нужно на другие хуки, исполняемые после того, как уже подгрузились редиректы. в общем, вместо последних двух строчек (remove_action; add_action...) вставил такую конструкцию:
PHP:
add_action('init','removeOldRedirectFunction');
function removeOldRedirectFunction(){
remove_action( 'template_redirect', 'wc_template_redirect' );
add_action('template_redirect', 'my_wc_template_redirect');
}
Если у кого есть возможность, проверьте работоспособность кода - того, что постом выше если у Вас правки в основной теме, и того, что в этом посте, если у Вас правки в дочерней теме. Для пробы попытаться открыть страницу чекаута при пустой корзине (должна быть пустой по идее), а также попробовать вбить в поиск товар с его точным названием (должен произойти редирект сразу на страницу товаров, без страницы результатов поиска). Таким образом, можно проверить и отключение родной функции редиректа, и подключиение измененной.
У меня вопрос. Если в настройках доставки указать "Доставка по адресу платежа по умолчанию" и "Доставка только по платежным адресам пользователей", то на странице оплаты вместо чекбокса "Доставка по другому адресу?" вылазит поле
"Дополнительная информация". Каким инструментом можно убрать этот блок без правки кода и таблицы стилей? Спасибо. Ссылка на страницу
У меня вопрос. Если в настройках доставки указать "Доставка по адресу платежа по умолчанию" и "Доставка только по платежным адресам пользователей", то на странице оплаты вместо чекбокса "Доставка по другому адресу?" вылазит поле
"Дополнительная информация". Каким инструментом можно убрать этот блок без правки кода и таблицы стилей? Спасибо. Ссылка на страницу
насколько я помню, в последней версии WC если настройки доставки выставлены как Вы написали, то галочки этой быть вообще не должно, и надписи меняются (вместо "реквизитов оплаты" что-то типа "сведения о покупателе" или "контактная информация", как-то так.)
Нет, и в последней версии WC, если включить чеки, описанные выше, отображается просто заголовок <H3> "Дополнительная информация", а под ней ничего - ни чеков, ни полей. Совет galiulinr помог.
Ув. Stork.71
Подскажите, можно ли Ваш код с радиокнопками для способов доставки адаптировать и использовать не через функции?
Пытаюсь реализовать пошаговое оформление заказа. Все как бы получилось, за исключением того, что использовал для вывода списка способов следующий код
При выборе одного варианта радиокнопка становится активной, а потом снимается выделение. Значение, если успеть перейти на следующую форму, сохраняется, да и в Резюме заказа все ОК, однако такое поведение может дезориентировать покупателя.
Каким образом можно воспользоваться Вашим кодом, чтобы вывести его в определенном div моего form-checkout.php
Добрый день! Подскажите, возникает проблема при изменении кода страницы Cart с [woocommerce_cart] на
Код:
[woocommerce_cart][hr][woocommerce_checkout]
При просмотре корзины отображается только woocommerce_checkout, шорткод woocommerce_cart вообще игнорируется, как и тег hr.
Вообщем-то занялся перепиливанием страницы оформления заказа из-за какого-то бага. Оформляя заказ вбиваешь все необходимые поля реквизитов оплаты, жамкаешь continue и ничего дальше не происходит, хотя по логике должен переходить на адрес доставки.
Адрес больного lw-shop.ru. Правда совмещение корзины и оплаты тестил на локалке.