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

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

Тема в разделе "Вопросы, советы и доработки.", создана пользователем Stork.71, 9 янв 2014.

  1. Zaknafain

    Zaknafain Местный

    Сообщения:
    137
    Симпатии:
    16
    Баллы:
    18
    мне без каталога ни как нельзя ) ну тогда выведу ее куда нибудь где она не так заметна... ну или на месте оставлю :)
    спасибо за всю информацию )
     
  2. Stork.71

    Stork.71 Местный

    Сообщения:
    1.043
    Симпатии:
    254
    Баллы:
    83
    /wp-admin/admin.php?page=wc-settings&tab=products
    попробуйте убрать галочку "Включить AJAX для кнопки добавления в корзину в архивах"
     
    • Нравится Нравится x 1
  3. Antonshka11

    Antonshka11

    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    http://ibs.esy.es/ у меня вообще шляпа с корзиной..
    Она кривая до безумия, сделал, как написано и не фига...
     
  4. Zaknafain

    Zaknafain Местный

    Сообщения:
    137
    Симпатии:
    16
    Баллы:
    18
    Вот получилось ) Спасибо за совет :)
     
  5. Stork.71

    Stork.71 Местный

    Сообщения:
    1.043
    Симпатии:
    254
    Баллы:
    83
    у меня вообще шляпа с сайтом по ссылке. Он не открывается ни фига.
     
  6. galiulinr

    galiulinr Местный

    Сообщения:
    181
    Симпатии:
    56
    Баллы:
    28
    Я все сделал как написано, все работает но как и у автора есть проблема. Если в корзине удалить товар то это приводит к ошибке в Хроме: На этой странице обнаружена циклическая переадресация в Мозиле: Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится. Я думаю это серьезный косяк, надо как то исправить. Ведь покупатель у нас может передумать и удалить некоторые товары которые он выбрал. Есть у кого мысли по этому поводу?
    При оплате Робокассой в режиме тестирования такая же проблема при нажатии Отказ от платежа.

    Решил проблему как писали в посте #8 с помощью плагина WooCommerce Direct Checkout переадресовал на страницу Оплата, а на странице Оплата добавил шорткод Корзины. Теперь все удаляется из корзины и Робокасса работает

    Да кстати шорткод Оплаты нужно также на страницу Корзина, иначе при нажатии в меню корзина будет отсутствовать кнопка перейти к оплате). Получается что у нас и в корзине и в оплате везде одинаковая форма. Я протестировал все работает товар с корзины удаляется, платеж через Робокассу отменяется. Вариант рабочий можно пользоваться.
     
    Последнее редактирование: 2 май 2014
  7. Маруся

    Маруся

    Сообщения:
    21
    Симпатии:
    1
    Баллы:
    3
    В целом все утраивает - не планирую таких глобальных изменений, перечитала все комменты, но вот где поменять надпись на странице "Оплата" - "Детали оплаты" на "Оформить заказ" так и не поняла.
     
  8. galiulinr

    galiulinr Местный

    Сообщения:
    181
    Симпатии:
    56
    Баллы:
    28
    Качаем Р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 поновой залить на сайт в тоже место откуда взяли.
     
    Последнее редактирование: 2 май 2014
    • Нравится Нравится x 1
    • Согласен Согласен x 1
  9. Stork.71

    Stork.71 Местный

    Сообщения:
    1.043
    Симпатии:
    254
    Баллы:
    83
    Если Вас устраивает, что вместо просто добавления в корзину у вас идет еще и переадресация на страницу корзины - то однозначно WooCommerce Direct Checkout это абсолютно правильное решение, а главное - 100% рабочее (вроде негативных отзывов не было) решение, и не надо ни с чем заморачиваться и сочинять велосипеды!
    Правда все же интересно, почему с Direct Checkout все работает, а при способе как у меня - не очень. Мне немного не хватает понимания того, как работает движок, что куда он кидает и почему начинается циклическая переадресация. Надеюсь, позже разберусь.
     
  10. Stork.71

    Stork.71 Местный

    Сообщения:
    1.043
    Симпатии:
    254
    Баллы:
    83
    Продолжаю свои копания :)

    Пытаюсь справиться с багом циклической переадресации при попадании на \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][hr][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_redirectget_post_type_archive_link('product') );
            exit;
        }

        
    // When on the checkout with an empty cart, redirect to cart page
        
    elseif ( is_pagewc_get_page_id'checkout' ) ) && sizeofWC()->cart->get_cart() ) == && empty( $wp->query_vars['order-pay'] ) && ! isset( $wp->query_vars['order-received'] ) ) {
            
    wp_redirectget_permalinkwc_get_page_id'cart' ) ) );
            exit;
        }

        
    // Logout
        
    elseif ( isset( $wp->query_vars['customer-logout'] ) ) {
            
    wp_redirectstr_replace'&''&'wp_logout_urlget_permalinkwc_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 == ) {
            
    $product get_product$wp_query->post );

            if ( 
    $product->is_visible() ) {
                
    wp_safe_redirectget_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_redirectget_post_type_archive_link('product') );
            exit;
        }

        
    // Logout
        
    elseif ( isset( $wp->query_vars['customer-logout'] ) ) {
            
    wp_redirectstr_replace'&''&'wp_logout_urlget_permalinkwc_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 == ) {
            
    $product get_product$wp_query->post );

            if ( 
    $product->is_visible() ) {
                
    wp_safe_redirectget_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. Но почему-то, старая функция остается, зацикливание не исчезает.
    Никто не знает, в чем может быть ошибка?
     
    • Нравится Нравится x 2
    • Информативно Информативно x 1
  11. Stork.71

    Stork.71 Местный

    Сообщения:
    1.043
    Симпатии:
    254
    Баллы:
    83
    Ап. Сам же и нашел решение.
    Проблема была в том, что у меня дочерняя тема, поэтому мой 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');
    }
    Если у кого есть возможность, проверьте работоспособность кода - того, что постом выше если у Вас правки в основной теме, и того, что в этом посте, если у Вас правки в дочерней теме. Для пробы попытаться открыть страницу чекаута при пустой корзине (должна быть пустой по идее), а также попробовать вбить в поиск товар с его точным названием (должен произойти редирект сразу на страницу товаров, без страницы результатов поиска). Таким образом, можно проверить и отключение родной функции редиректа, и подключиение измененной.
     
    Последнее редактирование: 14 май 2014
    • Нравится Нравится x 3
  12. tutsnew

    tutsnew

    Сообщения:
    59
    Симпатии:
    12
    Баллы:
    8
    У меня вопрос. Если в настройках доставки указать "Доставка по адресу платежа по умолчанию" и "Доставка только по платежным адресам пользователей", то на странице оплаты вместо чекбокса "Доставка по другому адресу?" вылазит поле
    "Дополнительная информация". Каким инструментом можно убрать этот блок без правки кода и таблицы стилей? Спасибо.
    Ссылка на страницу
     
  13. galiulinr

    galiulinr Местный

    Сообщения:
    181
    Симпатии:
    56
    Баллы:
    28
    Я только правкой в стиле убираю такие блоки, быстрее получается чем искать) div.woocommerce-shipping-fields {display: none;}
     
    • Нравится Нравится x 1
  14. Stork.71

    Stork.71 Местный

    Сообщения:
    1.043
    Симпатии:
    254
    Баллы:
    83
    насколько я помню, в последней версии WC если настройки доставки выставлены как Вы написали, то галочки этой быть вообще не должно, и надписи меняются (вместо "реквизитов оплаты" что-то типа "сведения о покупателе" или "контактная информация", как-то так.)
     
  15. tutsnew

    tutsnew

    Сообщения:
    59
    Симпатии:
    12
    Баллы:
    8
    Нет, и в последней версии WC, если включить чеки, описанные выше, отображается просто заголовок <H3> "Дополнительная информация", а под ней ничего - ни чеков, ни полей. Совет galiulinr помог.
     
  16. Stork.71

    Stork.71 Местный

    Сообщения:
    1.043
    Симпатии:
    254
    Баллы:
    83
    а у вас поле заметок к заказу не спрятано случайно?
     
    • Согласен Согласен x 1
  17. tutsnew

    tutsnew

    Сообщения:
    59
    Симпатии:
    12
    Баллы:
    8
    Точно уже не скажу, т.к. делал косметику в полях с помощью сафали лайт. Да уже и не важно, спасибо
     
  18. ADv

    ADv Местный

    Сообщения:
    430
    Симпатии:
    110
    Баллы:
    43
    Ув. Stork.71
    Подскажите, можно ли Ваш код с радиокнопками для способов доставки адаптировать и использовать не через функции?
    Пытаюсь реализовать пошаговое оформление заказа. Все как бы получилось, за исключением того, что использовал для вывода списка способов следующий код
    Код:
                    <?php do_action( 'woocommerce_review_order_before_shipping' ); ?>
    
                    <?php wc_cart_totals_shipping_html(); ?>
    
                    <?php do_action( 'woocommerce_review_order_after_shipping' ); ?>
    При выборе одного варианта радиокнопка становится активной, а потом снимается выделение. Значение, если успеть перейти на следующую форму, сохраняется, да и в Резюме заказа все ОК, однако такое поведение может дезориентировать покупателя.

    Каким образом можно воспользоваться Вашим кодом, чтобы вывести его в определенном div моего form-checkout.php
    Код:
        <div class="multistep_step span" id="multistep_step3" data-step="3">
            <div class="box_style">
    
    
    
                    <?php do_action( 'woocommerce_review_order_before_shipping' ); ?>
    
                    <?php wc_cart_totals_shipping_html(); ?>
    
                    <?php do_action( 'woocommerce_review_order_after_shipping' ); ?>
    
    
    
                <input type="submit" class="button prev" name="login" value="<?php _e('&larr; Ваши реквизиты', 'yit'); ?>" data-next="2" />
                <input type="submit" class="button next" name="login" value="<?php _e('Способ оплаты &rarr;', 'yit'); ?>" data-next="4" />
    
    
            </div>
        </div>
    Спасибо за ответ.

    Сам пациент http://busashop.com.ua/
     
    Последнее редактирование: 9 июн 2014
  19. hazzart

    hazzart

    Сообщения:
    7
    Симпатии:
    4
    Баллы:
    3
    Добрый день! Подскажите, возникает проблема при изменении кода страницы Cart с [woocommerce_cart] на
    Код:
    [woocommerce_cart][hr][woocommerce_checkout]
    При просмотре корзины отображается только woocommerce_checkout, шорткод woocommerce_cart вообще игнорируется, как и тег hr.
    Вообщем-то занялся перепиливанием страницы оформления заказа из-за какого-то бага. Оформляя заказ вбиваешь все необходимые поля реквизитов оплаты, жамкаешь continue и ничего дальше не происходит, хотя по логике должен переходить на адрес доставки.
    Адрес больного lw-shop.ru. Правда совмещение корзины и оплаты тестил на локалке.
     
  20. tutsnew

    tutsnew

    Сообщения:
    59
    Симпатии:
    12
    Баллы:
    8
    Нашёл готовое решение, может кому пригодится http://codecanyon.net/item/woocommerce-one-page-shopping/7158470
     
    • Нравится Нравится x 3