Я переопределяю функцию AJAX для добавления продукта с использованием WooCommerce, чтобы я мог также отправлять атрибуты в корзину (что не работает из коробки).Обновление корзины WooCommerce после добавления переменной продукции (AJAX)
Я следовал инструкциям на Update WooCommerce Cart After Adding Variable Product Via AJAX - что делает то, что я хочу - но он не работает полностью.
Все хорошо, когда я вышел из системы. Но когда я вхожу в Wordpress, переопределение PHP не работает/игнорируется. Я не получаю ошибок, и в корзину не добавляется продукт. Я пробовал много разных подходов, но ничего не помогает.
function ajax_add_to_cart_script() {
$vars = array('ajax_url' => admin_url('admin-ajax.php'));
wp_enqueue_script('wc-variation-add-to-cart', get_template_directory_uri() . '/js/jquery.add-to-cart.js', array('jquery'), null, true);
wp_localize_script('wc-variation-add-to-cart', 'WC_VARIATION_ADD_TO_CART', $vars);
}
add_action('wp_enqueue_scripts', 'ajax_add_to_cart_script');
add_action('wp_ajax_nopriv_woocommerce_add_variation_to_cart', 'so_27270880_add_variation_to_cart');
function so_27270880_add_variation_to_cart() {
ob_start();
$product_id = apply_filters('woocommerce_add_to_cart_product_id', absint($_POST['product_id']));
$quantity = empty($_POST['quantity']) ? 1 : wc_stock_amount($_POST['quantity']);
$variation_id = isset($_POST['variation_id']) ? absint($_POST['variation_id']) : '';
$variations = ! empty($_POST['variation']) ? (array) $_POST['variation'] : '';
$passed_validation = apply_filters('woocommerce_add_to_cart_validation', true, $product_id, $quantity);
if ($passed_validation && WC()->cart->add_to_cart($product_id, $quantity, $variation_id, $variations)) {
do_action('woocommerce_ajax_added_to_cart', $product_id);
if (get_option('woocommerce_cart_redirect_after_add') == 'yes') {
wc_add_to_cart_message($product_id);
}
// Return fragments
WC_AJAX::get_refreshed_fragments();
} else {
// If there was an error adding to the cart, redirect to the product page to show any errors
$data = array(
'error' => true,
'product_url' => apply_filters('woocommerce_cart_redirect_after_error', get_permalink($product_id), $product_id)
);
wp_send_json($data);
}
die();
}
Я убедившись, что add_action('wp_ajax_nopriv_woocommerce_add_variation_to_cart', 'so_27270880_add_variation_to_cart');
добавляется перед сниппета, чтобы убедиться, что увольняют, который работает, когда я вышел из системы. - но не тогда, когда я вошел в
Каждый получил какой-либо подскажите почему?
Ping @helgatheviking
При входе в систему перейдите в WooCommerce -> Статус системы -> Инструменты, прокрутите вниз и найдите «Режим отладки шаблона», убедитесь, что он не включен. –
Это не включено. – Chris
Кроме того, когда я возвращаю данные в консоли из вызова jQuery AJAX, я возвращаю «0», когда я вошел в систему. Когда я не получаю HTML-код, который ** WC_AJAX :: get_refreshed_fragments(); ** выводит HTML, который я определил в ** woocommerce_header_add_to_cart_fragment ($ fragments) ** – Chris