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');

Итак, мне нужно знать, как добавить «Стоимость доставки» как в корзину, так и в итоговые данные корзины.

Любая помощь в кодировании будет очень оценена.

Спасибо.

7 голосов | спросил tonyf 26 Jam1000000amSun, 26 Jan 2014 08:42:13 +040014 2014, 08:42:13

1 ответ


4

Во-первых, сохраните настраиваемое поле при редактировании своего продукта. Допустим, вы используете настраиваемое поле 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 для тестирования ... из обоих кодов, я не создал настраиваемое поле на своем сайте для тестирования.

ответил passatgt 26 Jpm1000000pmSun, 26 Jan 2014 16:06:31 +040014 2014, 16:06:31

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132