Поведение кнопки: я переименовал кнопку «Добавить в корзину» по умолчанию в «Бесплатный образец».
Цель: когда покупатель нажимает кнопку кнопку «Бесплатный образец», я хочу, чтобы она добавила в корзину другой продукт (соответствующий бесплатный образец продукта) вместо обычного продукта.
Бесплатный образец продукта: бесплатный образец — это отдельный продукт с установленной ценой. до 0 фунтов стерлингов.
Установка:
Я уже переименовал кнопку «Добавить в корзину» в «Бесплатный образец» как на страницах магазина, так и на страницах продуктов, и мне нравится, как она выглядит и позиционируется.
/>Каждому обычному продукту соответствует бесплатный образец продукта, который настроен как отдельный продукт в WooCommerce и стоит 0 фунтов стерлингов.
Что я пробовал:
Код function.php
Я добавил следующий код в свой файл function.php для управления функциональностью кнопок и сменой идентификатора продукта:
Код: Выделить всё
php
Copy code
// Modify the Add to Cart button text to 'Free Sample'
add_filter('woocommerce_product_single_add_to_cart_text', 'change_add_to_cart_button_text');
add_filter('woocommerce_product_add_to_cart_text', 'change_add_to_cart_button_text');
function change_add_to_cart_button_text() {
return __('Free Sample', 'woocommerce'); // Button says 'Free Sample'
}
// Ensure the correct free sample product is added to cart when the Free Sample button is clicked
add_filter('woocommerce_add_cart_item_data', 'add_free_sample_to_cart', 10, 3);
function add_free_sample_to_cart($cart_item_data, $product_id, $variation_id) {
if (isset($_POST['is_free_sample']) && $_POST['is_free_sample'] === 'true') {
// Get the corresponding free sample product ID from the array
$free_sample_id = get_free_sample_product_id($product_id);
if ($free_sample_id) {
$cart_item_data['product_id'] = $free_sample_id; // Replace the product ID with the free sample product ID
}
}
return $cart_item_data;
}
// Mapping of original products to free sample product IDs
function get_free_sample_product_id($product_id) {
$free_samples = array(
350 => 2658, // Original Product => Free Sample Product
353 => 2657,
362 => 2656,
368 => 2653,
371 => 2652,
// More mappings...
);
return isset($free_samples[$product_id]) ? $free_samples[$product_id] : false;
}
Даже после реализации описанного выше решения:
Нажатие кнопки «Бесплатный образец» по-прежнему добавляет исходный продукт в список корзина (по обычной цене), а не бесплатный образец продукта по цене 0 фунтов стерлингов.
Ошибок консоли нет, кнопка выглядит и работает нормально с точки зрения ее положения и стиля.
Я попробовал несколько подходов, включая переопределение поведения добавления в корзину, но, похоже, ничего не работает должным образом. Я хочу, чтобы кнопка плавно добавляла бесплатный образец продукта на основе сопоставления вместо основного продукта.
Что мне нужно:
Я был бы признателен за рекомендации по следующим вопросам:
Как правильно заменить продукт, добавляемый в корзину, на его бесплатный образец.
Почему текущий подход может не работать и возможные исправления.
Любая помощь был бы очень признателен!
Дополнительный контекст:
Я использую тему WoodMart, но основные функции WooCommerce все равно должны применяться. На кнопке уже есть правильный ярлык «Бесплатный образец», и мне просто нужно убедиться, что соответствующий бесплатный образец товара добавлен в корзину.
Заранее благодарим за любую помощь!
Заранее благодарим за любую помощь!
Заранее благодарим за любую помощь!
п>
Подробнее здесь: https://stackoverflow.com/questions/790 ... ct-instead