Я безуспешно пытался всеми возможными способами добавить второй условный товар в корзину в «Добавить в корзину», если установлен флажок.
У меня есть форма заказа, и я хотел бы добавить второй продукт в корзину, если установлен флажок. Я начал с попытки добавить значение через сеанс или cookie. Это работало на страницах с отдельным продуктом, но не с шорткодом «Добавить в корзину» [add_to_cart id = «XX»]. Я думал, что AJAX — мой лучший шанс, но я неопытен с AJAX и не могу сказать, шорткод или я.
Вот мой дешевый способ добраться до «Добавить в корзину» при наличии флажка.
Входные данные:
function sample_input(){
echo '
<form id="myform" action="">
Check this box:
<input type="checkbox" id="add-to-cart" name="16379" /><input type="submit" value="Submit" /></div></form>
';
}
Загрузить скрипты:
function enqueue_scripts_styles_init() {
wp_enqueue_script( 'ajax-script', plugins_url( '/js/ajax-testing-script.js', __FILE__ ), array('jquery'), 1.0 ); // jQuery will be included automatically
wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); // setting ajaxurl
}
add_action('init', 'enqueue_scripts_styles_init');
JQuery:
jQuery(function($){
send_data = function(item) {
$.post(ajax_object.ajaxurl, {
dataType: "json",
data: {'item' : item},
type: "POST",
cache: false
}).done(function(data, status, xml) {
var obj = jQuery.parseJSON(data);
alert(obj.success);
}).fail(function(jqXHR, textStatus, errorThrown) {
}).always(function() {
});
}$("#show").click(function() {
var $check = $('input#item');
if ($check.is(":checked")) {
alert("Yes");
send_data($check.val());
} else {
alert("box is not checked");
}});});
Это успешный метод, и он дает мне правильный продукт, добавленный в корзину, предупреждение «Да» плюс второе предупреждение «неопределено». Так что я думаю, что где-то AJAX сломан, так как я получаю предупреждение «undefined». Плюс, когда я меняю id
, name
, а также value
на флажок, чтобы id="item" name="item" value="AddOnProduct"
и полагаться на PHP, чтобы доставить добавить в корзину, я не получаю результатов от send_data = function(item) {}
Если я изменю submit
кнопка для do_shortcode('[add_to_cart id="517"]')
, Я получаю предупреждение о сбое «флажок не установлен», и в корзину добавляется только идентификатор продукта. Поэтому я думаю, что AJAX не настроен для одновременной обработки функции добавления в корзину и моего ajax. В конце концов, вот что должен делать финальный код:
echo '
<form id="myform" action="">
Check this box:
<input type="checkbox" id="item" name="item" value="AddOnProduct" />
<div id="show">' . do_shortcode('[add_to_cart id="517"]') . '</div></form>';
PHP:
function ajax_action_stuff() {
if (isset($_REQUEST['item'])) {
WC()->cart->add_to_cart( 16379 ); //2nd product
} else {
return;
}
}
add_action( 'wp_ajax_ajax_action', 'ajax_action_stuff' );
add_action( 'wp_ajax_nopriv_ajax_action', 'ajax_action_stuff' );
На (#show)click()
ajax должен отправить идентификатор продукта в корзину и захватить второй идентификатор для отправки в корзину, если был отмечен «элемент». Я думаю, что если бы я мог успешно передать значение обратно в PHP, я мог бы выполнить команду в моей функции ajax. Это AJAX или шорткод в корзину?
Задача ещё не решена.
Других решений пока нет …