WooCommerce - Отображение стоимости доставки на странице товара

6 окт. 2013 г., 21:14:26
Просмотры: 30.3K
Голосов: 4

Я разрабатываю сайт электронной коммерции с использованием WooCommerce для клиента, и они хотят иметь возможность показывать стоимость доставки товара на странице продукта (потому что так было реализовано на их старом сайте магазина). Есть ли способ это сделать? Я искал информацию, но не нашел ничего определенного, и хотя здесь на StackExchange есть похожий вопрос, никто на него не ответил.

Я знаю, что существует плагин за $79, который это делает, но есть ли способ установить стоимость доставки для каждого товара отдельно? Хотелось бы избежать покупки плагина.

0
Все ответы на вопрос 2
8

Вы можете отображать стоимость доставки для каждого товара в WooCommerce 2.x. Как отобразить стоимость доставки

Так как вы установили фиксированные цены за единицу товара, вы можете показать их в описании продукта, просто вписав их туда. Или же можно обратиться к классу доставки товара (это таксономия) "product_shipping_class", который может быть назначен каждому продукту индивидуально или массово через быстрое редактирование.

Как отобразить это в шаблоне товара? Каждая страница товара организована в виде директории woocommerce. Вы можете скопировать эту директорию из папки плагина WooCommerce прямо в папку вашей темы. После этого вы можете вносить любые изменения, не опасаясь, что будущие обновления перезапишут ваши правки. Вот ссылка на инструкции по работе с файлами темы WooCommerce.

Начните со страницы 'single-product.php'. Это основной цикл для страницы отдельного товара, затем 'content-single-product.php', который детализирует хуки внутри шаблона товара.

В зависимости от того, где вы хотите отобразить информацию о доставке, вы можете получить доступ к терминам, назначенным товару (если у вас разные тарифы для разных товаров). Используйте get_the_terms( $post->ID, 'product_shipping_class'). Для получения дополнительной информации о работе с этим вызовом см. эту статью.

Используя PHP для разбора массива, вы узнаете класс доставки и сможете отобразить информацию о стоимости доставки, выполнив расчет на основе возвращенного класса доставки.

Есть еще несколько способов сделать это с использованием объекта класса доставки, но этого должно хватить для начала.

6 окт. 2013 г. 22:26:31
Комментарии

Спасибо, Стив, у меня есть один уточняющий вопрос - я использовал тот фрагмент кода/вызов, который вы привели выше, адаптировав его для создания переменной, а затем вывода этой переменной в нужном месте шаблона. Однако, он просто выводит слово 'Array'. Мои знания PHP не очень сильные, поэтому я не уверен, как действовать дальше? В WooCommerce я создал классы доставки для каждой цены (Доставка: £3.00, Доставка: £4.00 и т.д.) и назначил им стоимость в разделе настроек доставки.

tristanojbacon tristanojbacon
7 окт. 2013 г. 05:12:26

Попробуйте вывести переменную с помощью var_dump($variable). Вы увидите, что находится в массиве. Затем вы сможете обращаться к конкретным элементам по их структуре в массиве.

Steve Eldridge Steve Eldridge
7 окт. 2013 г. 17:54:07

Я сделал var_dump, но он вывел bool(false).....

tristanojbacon tristanojbacon
7 окт. 2013 г. 17:59:51

Хорошо, вы назначили класс доставки для товаров?

Steve Eldridge Steve Eldridge
7 окт. 2013 г. 20:41:01

Да, товар, на котором я тестировал, имеет класс доставки под названием Доставка: £3.00, который я связал с таблицей фиксированной ставки доставки стоимостью £3.00. Я подтвердил, что это работает, потому что когда я добавляю товар в корзину, стоимость доставки отображается как £3.00

tristanojbacon tristanojbacon
7 окт. 2013 г. 21:17:07

Также, решение есть в классе $product. Вам нужно убедиться, что вы вызываете global $product. Вы можете вызвать классы с помощью php кода echo $product->get_price_html(); чтобы увидеть класс продукта на страницах товаров.

Steve Eldridge Steve Eldridge
8 окт. 2013 г. 23:28:33

Ок, я добавил <?php echo $product->get_shipping_class(); ?> в шаблон, и он выводит slug класса доставки! Уже почти получилось! Как сделать, чтобы этот вызов выводил название термина вместо slug? Спасибо за помощь в этом вопросе :)

tristanojbacon tristanojbacon
9 окт. 2013 г. 04:08:02

Ок, почти готово, и вот окончательный ответ: <?php $slug = $product->get_shippingclass(); $slugobject = get_term_by('slug', $slug, 'product_shipping_class'); echo $slugobject->name; ?>

Steve Eldridge Steve Eldridge
10 окт. 2013 г. 01:07:47
Показать остальные 3 комментариев
1

Старая запись, но может помочь в отображении стоимости доставки

<?php
$slug = $product->get_shipping_class_id();
$slugobject = get_term_by('term_taxonomy_id', $slug, 'product_shipping_class');
echo $slugobject->description;?>

Этот скрипт будет работать для типа доставки "Фиксированная ставка":

global $product; /* Удалите, если уже установлено.. */
$shipping_class = $product->get_shipping_class();
$flat_rate = new WC_Shipping_Flat_Rate;
$symbol = get_woocommerce_currency_symbol();
echo $symbol . $flat_rate->flat_rates[$shipping_class]['cost'];
3 февр. 2015 г. 12:06:41
Комментарии

Это больше не работает в WooCommerce 2.6 и выше

Avishai Avishai
1 февр. 2017 г. 20:30:04