WooCommerce - Как добавить пользовательское поле в корзину Items and Cart Totals [закрыто]
Я использую плагин WooCommerce и имею следующий запрос:
В пределах одной страницы продукта у меня есть продукт, на котором на основании определенных вариантов покупателя покупатель рассчитывает стоимость доставки, которую мне затем нужно передать /включить как часть элементов корзины в качестве нового столбца, «Доставка Стоимость "при просмотре тележки.
Дело в том, что покупатель может решить купить три разных продукта, где каждый из этих трех продуктов может иметь различные расчеты стоимости доставки, после трехкратного нажатия кнопки «Добавить в корзину».
Например:
Product A selections calculates a Shipping Cost of $2.00
Product B selections calculates a Shipping Cost of $4.00
Product C selections calculates a Shipping Cost of $6.00
Итак, основываясь на вышесказанном, когда покупатель закончил покупки и нажимает «Просмотр корзины», я хочу, чтобы они увидели:
Item Price Shipping Cost Quantity Total
---------------------------------------------------------------------------------------
Product A $10 $2 1 $10
Product B $5 $4 1 $5
Product C $15 $6 1 $15
Это поле столбца «Стоимость доставки», которое я хотел бы добавить в корзину, и это то, что я не уверен, как это сделать.
В дополнение к вышесказанному, я также хочу добавить в «Тоталы корзины» ниже, другое настраиваемое поле «Стоимость доставки», которое составит 12 долларов США, которое затем будет добавлено к общей сумме продуктов, т. е.
Cart Totals
Cart Subtotal $30
Shipping Cost $12
Order Total $42
Некоторый код, который я использовал для Cart Общая стоимость доставки:
function woo_add_cart_fee() {
global $woocommerce;
$woocommerce->cart->add_fee( __('Shipping Cost', 'woocommerce'), 100 );
}
add_action( 'woocommerce_before_calculate_totals', 'woo_add_cart_fee');
Итак, мне нужно знать, как добавить «Стоимость доставки» как в корзину, так и в итоговые данные корзины.
Любая помощь в кодировании будет очень оценена.
Спасибо.
1 ответ
Во-первых, сохраните настраиваемое поле при редактировании своего продукта. Допустим, вы используете настраиваемое поле custom_shipping_cost. Убедитесь, что его сохранено как число, 20, например, НЕ $ 20.00
Затем вам нужно отобразить это поле на странице корзины. К сожалению, у theres нет фильтра для добавления нового столбца в таблицу корзин, поэтому вам нужно отредактировать файл шаблона, или если его не требуется, чтобы быть столбцом, вы можете сделать это вместо этого, этот код добавит дополнительное значение к последнему колонка:
add_filter('woocommerce_cart_item_subtotal','additional_shipping_cost',10,3);
function additional_shipping_cost($subtotal, $values, $cart_item_key) {
//Get the custom field value
$custom_shipping_cost = get_post_meta($post->ID, 'custom_shipping_cost', true);
//Just for testing, you can remove this line
$custom_shipping_cost = 10;
//Check if we have a custom shipping cost, if so, display it below the item price
if ($custom_shipping_cost) {
return $subtotal.'<br>+'.woocommerce_price($custom_shipping_cost).' Shipping Cost';
} else {
return $subtotal;
}
}
Таким образом, первая часть вопроса будет выполнена. Если вы хотите отобразить его в качестве примера выше, вам необходимо дублировать файлы plugins /woocommerce /templates /cart /cart.php на темы /yourtheme /woocommerce /cart /cart.php. Затем отредактируйте файл, добавьте свой столбец, вы можете использовать приведенный выше код для отображения цены.
После этого нам нужно обновить итоговые данные корзины с дополнительными расходами. Ваш код с помощью add_fee вам пригодится:
function woo_add_cart_fee() {
global $woocommerce;
$extra_shipping_cost = 0;
//Loop through the cart to find out the extra costs
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
//Get the product info
$_product = $values['data'];
//Get the custom field value
$custom_shipping_cost = get_post_meta($_product->id, 'custom_shipping_cost', true);
//Just for testing, you can remove this line
$custom_shipping_cost = 10;
//Adding together the extra costs
$extra_shipping_cost = $extra_shipping_cost + $custom_shipping_cost;
}
//Lets check if we actually have a fee, then add it
if ($extra_shipping_cost) {
$woocommerce->cart->add_fee( __('Shipping Cost', 'woocommerce'), $extra_shipping_cost );
}
}
add_action( 'woocommerce_before_calculate_totals', 'woo_add_cart_fee');
Вот он, он должен работать после этого. Обязательно удалите строки Just для тестирования ... из обоих кодов, я не создал настраиваемое поле на своем сайте для тестирования.