Я делаю продукт с 3 переменными. Покупатель может забрать товар у нас или мы можем его доставить. Из практических соображений мы решили продавать товары в упаковках по 30, 60 или 90 штук.
Прежде чем можно будет показать цену, необходимо выбрать все 3 переменные. Итак, вот в чем проблема. Если человек хочет забрать товар у нас, нужно выбрать всего 2 переменные: Длина в м и Самовывоз или Доставка. Но это не даст цены. Поэтому мне нужно снова вставить «Самовывоз» в «Пакеты», чтобы получить цену.
Но хотелось бы скрыть "самовывоз" в пакетах, чтобы не сильно запутать посетителя. Изображение описывает то, что я ищу:
Страницу можно [смотреть здесь][2]
Это код, который у меня есть до сих пор, но, как я вижу, либо мой код не выполняется, либо код просто неверен. Страница выглядит точно так же, как и до того, как я добавил свой код в functions.php, и ни одна из функций не выполняется.
Основываясь на моем описании, кто-нибудь знает, что не так с моим кодом?
HTML:
<ul class = "variable-items-wrapper button-variable-wrapper" data-attribute_name = "attribute_pa_packages">
<li data-wvstooltip = "pickup" class = "variable-item button-variable-item button-variable-item-pickup" title = "pickup" data-value = "pickup">
<span class = "variable-item-span variable-item-span-button">pickup</span>
</li>
</ul>
<ul class = "variable-items-wrapper button-variable-wrapper" data-attribute_name = "attribute_pa_packages">
<li data-wvstooltip = "pickup" class = "variable-item button-variable-item button-variable-item-pickup selected" title = "pickup" data-value = "pickup">
<span class = "variable-item-span variable-item-span-button">pickup</span></li>
</li>
</ul>
PHP и скрипт:
function custom_script_name(){
?>
<script>
jQuery("ul[data-attribute_name=attribute_pa_pickup-og-delivery] li").click(function(){
var selectedDelivery = jQuery("ul[data-attribute_name=attribute_pa_pickup-og-delivery]").find("li.selected").attr("data-value");
if (selectedDelivery == "pickup"){
jQuery("ul[data-attribute_name=attribute_pa_packages] li[data-value=pickup] span").click();
jQuery("ul[data-attribute_name=attribute_pa_packages] li[data-value=pickup]").hide(); // hide the "pickup" option in "Packages" if you like
}
});
</script>
<?php
}
add_action('wp_head', 'custom_script_name');
Спасибо за комментарий. Мне нужно сохранить это как кнопки, потому что для этого есть клиент. В Wordpress нет условной логики. Затем вам нужно купить формы Gravity и т. д., чего клиент не хочет. Поэтому я изо всех сил стараюсь найти альтернативное решение :-)
Я не понимаю, в чем проблема?
Спасибо за ваш комментарий @stefo91. Извините, если я был недостаточно ясен. Я только что снова обновил свой вопрос, надеюсь, он более понятен.
Вы можете добавить display: none в пакеты pickup или добавить к ним класс css, который имеет display: none; Затем проверьте через jquery, если кто-то нажимает "забрать при доставке", чтобы показать получение из посылок.
Спасибо за ваш комментарий @IndF.Ashiku. Правильно с display: none;
. Но пикап еще нужно выбрать, чтобы узнать цену.
Вы можете попробовать приведенный ниже код, он скроет кнопку, но при нажатии кнопки она будет выбрана. просто обновите jquery и попробуйте один раз. надеюсь это была работа
jQuery(document).ready(function(){
jQuery("ul[data-attribute_name=attribute_pa_packages] li[data-value=pickup]").hide();
jQuery("ul[data-attribute_name=attribute_pa_pickup-og-delivery] li").click(function(){
var selectedDelivery = jQuery("ul[data-attribute_name=attribute_pa_pickup-og-delivery]").find("li.selected").attr("data-value");
if (selectedDelivery == "pickup"){
jQuery("ul[data-attribute_name=attribute_pa_packages] li[data-value=pickup] span").click();
jQuery("ul[data-attribute_name=attribute_pa_packages] li[data-value=pickup]").hide(); // hide the "pickup" option in "Packages" if you like
}
});
});
Большое спасибо за ответ Альфараз. Я только что попытался обновить functions.php вашим кодом, но вижу, что он ничего не делает. Я добавил следующий код: paiza.io/projects/yCxqHpYXRidzwHiAyd1yDQ. У вас есть идея, почему это так? Если у вас есть доступ к моему Wordpress, не могли бы вы лучше помочь мне? С наилучшими пожеланиями.
Да, я помогу вам, если вы дадите мне доступ к сайту WordPress.
Большое спасибо. Куда я могу отправить вам данные для входа?
Вы можете отправить меня сюда, или, если вы хотите, отправить его по скайпу. ?
Пожалуйста, напишите здесь, когда вы записали код, чтобы я мог снова удалить комментарий. Это тестовая площадка, прежде чем я начну жить
Хорошо, данные для входа работают.. позвольте мне проверить код. Вы просто хотите скрыть элемент пикапа при посещении пользователя и нажатии кнопки пикапа, а затем выбранной ниже кнопки пикапа, но она остается скрытой. правильно ?
Да, но самовывоз здесь никогда не должен показываться посетителю: pasteboard.co/Ih5bAM3.png, но всегда должен быть активен, если только не нажата кнопка «Доставка».
Давайте продолжить обсуждение в чате.
Если я правильно понял вопрос, вам не нужна вторая кнопка вызова. Все, что вам нужно сделать, это поиграть с тем, когда показывать цену. Всякий раз, когда нажимается кнопка длины, самовывоза, доставки или упаковки, проверьте, соблюдены ли все необходимые условия, чтобы показать цену, а затем покажите цену. Проверка может быть такой: если выбрана доставка, то должны быть выбраны и посылки, иначе, если выбран самовывоз, посылки не требуются.
Спасибо за ваше предложение. Да это правда. Я больше ищу предложения по коду или что в моем коде не так.
Если я правильно понял вопрос:
Вот способ JS сделать это:
Вот пример кода с более простым HTML (Live stackblitz: https://stackblitz.com/edit/js-l9ddiq):
<div>
<span>Length</span>
<button>4.2m</button>
<button>5.1m</buton>
</div>
<div>
<span>Pickup or delivery</span>
<button id = "pickup-button">Pickup</button>
<button id = "delivery-button">Delivery</buton>
</div>
<div id = "packages">
<span>Packages</span>
<button class = "toggle-button" style = "display: none;">Pickup</button>
<button>30</button>
<button>60</button>
<button>90</button>
</div>
JS:
const pickUpButton = document.getElementById('pickup-button');
pickUpButton.addEventListener('click', event => {
const packageButtons = document.querySelector('#packages').querySelectorAll('button');
packageButtons.forEach(button => {
if (button.classList.contains('toggle-button')) {
button.style.display = 'block';
} else {
button.disabled = true;
}
});
});
const deliveryButton = document.getElementById('delivery-button');
deliveryButton.addEventListener('click', event => {
const packageButtons = document.querySelector('#packages').querySelectorAll('button');
packageButtons.forEach(button => {
if (button.classList.contains('toggle-button')) {
button.style.display = 'none';
} else {
button.disabled = false;
}
});
});
это легко, если вы дадите раскрывающийся список для получения и доставки, и на основе выбора этого вы можете показать дополнительные параметры.