Я использую следующий код, чтобы добавить товар в корзину при нажатии кнопки. Он работает нормально (товар добавляется в корзину), но количество в мини-корзине обновляется только после второго добавления. Когда я впервые нажимаю «Добавить», на мини-значке корзины не отображается обновление (если я не обновлю страницу). Каждый второй щелчок по добавлению в корзину учитывается.
Я использую тему Wordpress по умолчанию.
Код PHP:
add_action('wp_ajax_map_woo_add_to_cart', 'map_woo_add_to_cart');
function map_woo_add_to_cart(){
if(isset($_POST['product_id'])){
$product_id = $_POST['product_id'];
ob_start();
$quantity = 1;
$passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity );
$product_status = get_post_status( $product_id );
$added = WC()->cart->add_to_cart( $product_id, $quantity );
if ( $passed_validation && $added && 'publish' === $product_status ) {
ob_start();
woocommerce_mini_cart();
$mini_cart = ob_get_clean();
$data = array(
'fragments' => apply_filters(
'woocommerce_add_to_cart_fragments',
array(
'div.widget_shopping_cart_content' => '' . $mini_cart . '',
)
),
'cart_hash' => WC()->cart->get_cart_hash(),
'ajax_nonce' => wp_create_nonce( 'map_woo-security-nonce' ),
);
wp_send_json_success( $data );
} else {
$data = array(
'message' => __( 'The product was not added to the cart', MAP_WOO_TEXTDOMAIN ),
'product_url' => apply_filters( 'woocommerce_cart_redirect_after_error', get_permalink( $product_id ), $product_id ),
'product_id' => $product_id,
);
wp_send_json_error( $data );
}
}
}
Javascript:
function addProductToCart(postId, data){
const params = new URLSearchParams();
params.append("action", 'map_woo_add_to_cart');
params.append("product_id", postId);
var xhrRequest = new XMLHttpRequest();
xhrRequest.onreadystatechange = function() {
if (this.readyState == 4) {
var result = JSON.parse(this.responseText);
console.log(result);
if ( result.data.fragments ) {
jQuery( document.body ).trigger( 'wc_fragment_refresh' );
jQuery( document.body ).trigger( 'added_to_cart', [ result.data.fragments, result.data.cart_hash ] );
}
}
}
xhrRequest.onerror = function(e) {
console.log('Error add_to_cart: ' + e);
};
xhrRequest.open('POST', settings.ajax_url);
xhrRequest.setRequestHeader("Content-Type", 'application/x-www-form-urlencoded');
xhrRequest.send(params);
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... count-ajax
Обновление Woocommerce подсчета мини-корзины ajax ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1731499718
Anonymous
Я использую следующий код, чтобы добавить товар в корзину при нажатии кнопки. Он работает нормально (товар добавляется в корзину), но количество в мини-корзине обновляется только после второго добавления. Когда я впервые нажимаю «Добавить», на мини-значке корзины не отображается обновление (если я не обновлю страницу). Каждый второй щелчок по добавлению в корзину учитывается.
Я использую тему Wordpress по умолчанию.
Код PHP:
add_action('wp_ajax_map_woo_add_to_cart', 'map_woo_add_to_cart');
function map_woo_add_to_cart(){
if(isset($_POST['product_id'])){
$product_id = $_POST['product_id'];
ob_start();
$quantity = 1;
$passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity );
$product_status = get_post_status( $product_id );
$added = WC()->cart->add_to_cart( $product_id, $quantity );
if ( $passed_validation && $added && 'publish' === $product_status ) {
ob_start();
woocommerce_mini_cart();
$mini_cart = ob_get_clean();
$data = array(
'fragments' => apply_filters(
'woocommerce_add_to_cart_fragments',
array(
'div.widget_shopping_cart_content' => '' . $mini_cart . '',
)
),
'cart_hash' => WC()->cart->get_cart_hash(),
'ajax_nonce' => wp_create_nonce( 'map_woo-security-nonce' ),
);
wp_send_json_success( $data );
} else {
$data = array(
'message' => __( 'The product was not added to the cart', MAP_WOO_TEXTDOMAIN ),
'product_url' => apply_filters( 'woocommerce_cart_redirect_after_error', get_permalink( $product_id ), $product_id ),
'product_id' => $product_id,
);
wp_send_json_error( $data );
}
}
}
Javascript:
function addProductToCart(postId, data){
const params = new URLSearchParams();
params.append("action", 'map_woo_add_to_cart');
params.append("product_id", postId);
var xhrRequest = new XMLHttpRequest();
xhrRequest.onreadystatechange = function() {
if (this.readyState == 4) {
var result = JSON.parse(this.responseText);
console.log(result);
if ( result.data.fragments ) {
jQuery( document.body ).trigger( 'wc_fragment_refresh' );
jQuery( document.body ).trigger( 'added_to_cart', [ result.data.fragments, result.data.cart_hash ] );
}
}
}
xhrRequest.onerror = function(e) {
console.log('Error add_to_cart: ' + e);
};
xhrRequest.open('POST', settings.ajax_url);
xhrRequest.setRequestHeader("Content-Type", 'application/x-www-form-urlencoded');
xhrRequest.send(params);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79184363/woocommece-update-mini-cart-count-ajax[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия