2014-11-19 4 views
1

Я хотел бы спросить, как я могу отключить AJAX на странице проверки (где вы вводите данные о доставке и платежах), и вместо использования AJAX для обновления сводки корзины на основе вашего местоположения будет обновляться, выполняя естественное обновление.Отключить AJAX при оформлении заказа на WooCommerce

В настоящее время сводка товаров обновляется без перезагрузки страницы всякий раз, когда пользователь переключает свое местоположение через место доставки. Я хотел бы удалить этот AJAX и просто перезагрузить страницу с обновленной информацией.

Я не слишком уверен, какие коды или направления я должен указывать, но я готов предоставить любые необходимые детали. Просто дай мне знать! Спасибо!!

+1

Почему вы пытаетесь удалить Ajax?Под Woocommerce-> Настройки-> Продукты-> Добавить в корзину есть раздел, чтобы отключить Ajax, но это может быть не то, что вы ищете. –

+0

@ Robert Lee Я пытаюсь удалить AJAX, потому что это переписывает мои переводы. Я искал способы обновления обновленного контента через AJAX каждый раз, поэтому вместо этого я бы скорее удалил его и перезагрузил страницу соответствующим текстом, который переводится каждый раз. К сожалению, отключите AJAX, используя метод, о котором вы говорили, только отключает AJAX при добавлении продуктов в корзину. – chdltest

ответ

8

Все строки WooCommerce правильно локализованы с помощью wp_localize_script, поэтому я думаю, что вы могли бы правильно их перевести, создав соответствующий файл .po/.mo, но я признаюсь, что не имею большого опыта работы с переводами. Для справки: все доступные языковые пакеты - at Github, и вы также можете прочитать documentation.

В любом случае, скрипты оформления находятся в checkout.js. Как любой скрипт, вы можете удалить его через wp_dequeue_script(), пока знаете ручку.

function so_27023433_disable_checkout_script(){ 
    wp_dequeue_script('wc-checkout'); 
} 
add_action('wp_enqueue_scripts', 'so_27023433_disable_checkout_script'); 
+0

Что происходит, когда вы записываете скрипт? – chdltest

+0

Он не загружается на переднем конце. Обратитесь к статье codex. – helgatheviking

0

Один из способов не отменить checkout.js.

Во-первых, возможно, что checkout.min.js загружается вместо checkout.js.

Затем комментарий thoses 2 строки:

update_checkout:function(){ 
    //b.reset_update_checkout_timer(), 
    //b.updateTimer=setTimeout(b.update_checkout_action,"5") 
}, 

Тогда ваша страница проверки будет Аякса бесплатно!

1

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

$(document.body).bind('update_checkout', this.update_checkout); 

После прочтения немного, я обнаружил, что я не буду иметь возможности отвязать из пространства имен, поэтому я подключил на on событии и так как я не могу предотвратить дефолт я купируюсь распространением события ,

и они решили мою проблему.

jQuery(document.body).on('update_checkout', function(e){ 
    //e.preventDefault(); 
    //e.stopPropagation(); 
    e.stopImmediatePropagation(); 
    //console.log(e); 
}); 
+0

Это хорошая идея. Надеемся, что ваше событие будет запущено до того, как будет установлено значение по умолчанию для WC. В противном случае я думаю, что e.stopImmediatePropagation остановит оставшиеся подключенные функции, но не тот, который уже выполнен. Очевидно, вы можете проверить момент, когда WC перехватывает свою функцию, и вы можете подключить свою функцию только раньше. Так что да, я думаю, это сработает. –

0

Если следовать логике checkout.js исходного кода вы заметите, что эти действия AJAX, связанные с редактированием счетов | адреса доставки можно безопасно отключить, изменив имя класса формы в Checkout. Да, я знаю, все просто. Итак, вместо form.checkout сделайте это form.checkout1, где .checkout1 - это просто воображаемое имя класса (оно не обязательно должно быть реальным/существующим).

Вот пример кода, который может помочь вам понять, что требуется:

var default_class = 'checkout'; 
var mask_class = 'checkout1'; 

// hijack the form's AJAX by changing form's default class name 
$('form.'+default_class).addClass(mask_class).removeClass(default_class); 

// restore the original class name whenever you want it 
$('form.'+mask_class).addClass(default_class).removeClass(mask_class); 

Пожалуйста, обратите внимание, что это хак, который он не документированы. Однако они могут изменить функциональность формы выписки в любое время, поэтому имейте это в виду. Я могу подтвердить, что он работает на WC 2.6.14 и, возможно, в более ранних версиях.

+0

Еще одна вещь об этом подходе: убедитесь, что вы вернули класс по умолчанию на body.checkout_error, иначе вы можете столкнуться с ошибкой JS, потому что функция submit_error checkout.js будет оценивать $ ('form.checkout') .offset() что вызовет исключение ReferenceError. –

Смежные вопросы