Вставьте настраиваемую итоговую строку в корзину и итоги оформления заказа в Woocommerce

В woocommerce мне успешно удалось добавить настраиваемое поле к простому продукту Woocommerce и отобразить это значение на вкладке дополнительной информации на странице продукта.

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

В настраиваемом поле хранится объем предмета мебели в м3. Когда клиент добавляет товар в корзину, я хотел бы рассчитать общий объем отправления в м3, сложив значения всех настраиваемых полей вместе и отобразив общую сумму для покупателя на странице. Может ли кто-нибудь указать мне в правильном направлении, как добавить эти настраиваемые поля и отобразить их, пожалуйста.

Пока мой код выглядит так

    // Display Fields using WooCommerce Action Hook
add_action( 'woocommerce_product_options_general_product_data', 'woocom_general_product_data_custom_field' );

function woocom_general_product_data_custom_field() {
  // Create a custom text field


  // Number Field
  woocommerce_wp_text_input( 
    array( 
      'id' => '_item_volume', 
      'label' => __( 'Item Shipping Volume', 'woocommerce' ), 
      'placeholder' => '', 
      'description' => __( 'Enter the volume her in m3.', 'woocommerce' ),
      'type' => 'number', 
      'custom_attributes' => array(
         'step' => 'any',
         'min' => '0.001'
      ) 
    )
  );

}

// Hook to save the data value from the custom fields
add_action( 'woocommerce_process_product_meta', 'woocom_save_general_proddata_custom_field' );

/** Hook callback function to save custom fields information */
function woocom_save_general_proddata_custom_field( $post_id ) {

  // Save Number Field
  $number_field = $_POST['_item_volume'];
  if ( ! empty( $number_field ) ) {
     update_post_meta( $post_id, '_item_volume', esc_attr( $number_field ) );
  }

}

add_action( 'woocommerce_product_additional_information', 'custom_data_in_product_add_info_tab', 20, 1 );
function custom_data_in_product_add_info_tab( $product ) {

    //Product ID - WooCommerce compatibility
    $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

    // Get your custom fields data
    $custom_field1 = get_post_meta( $product_id, '_item_volume', true );


    // Set your custom fields labels (or names)
    $label1 = __( 'Shipping Volume m3', 'woocommerce');


    // The Output
    echo '<h3>'. __('Item Shipping Volume', 'woocommerce') .'</h3>
    <table class = "custom-fields-data">
        <tbody>
            <tr class = "custom-field1">
                <th>'. $label1 .'</th>
                <td>'. $custom_field1 .'</td>
            </tr>
        </tbody>
    </table>';
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
0
5 030
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Следующее будет отображать общий объем корзины на странице корзины и оформления заказа:

add_action( 'woocommerce_cart_totals_before_shipping', 'display_cart_volume_total', 20 );
add_action( 'woocommerce_review_order_before_shipping', 'display_cart_volume_total', 20 );
function display_cart_volume_total() {
    $total_volume = 0;

    // Loop through cart items and calculate total volume
    foreach( WC()->cart->get_cart() as $cart_item ){
        $product_volume = (float) get_post_meta( $cart_item['product_id'], '_item_volume', true );
        $total_volume  += $product_volume * $cart_item['quantity'];
    }

    if ( $total_volume > 0 ){

        // The Output
        echo ' <tr class = "cart-total-volume">
            <th>' . __( "Total Shipping Volume", "woocommerce" ) . '</th>
            <td data-title = "total-volume">' . number_format($total_volume, 2) . ' m3</td>
        </tr>';
    }
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Можно сделать так, чтобы настраиваемое поле объема автоматически вычислялось на уровне продукта на основе значений размеров продукта ... Если это вас интересует, вы можете задать новый связанный вопрос и уведомить меня здесь ... Тогда я отвечу на него.

LoicTheAztec 31.03.2018 14:51

Привет - есть ли код, который я могу использовать для вставки таблицы с общим объемом, скажем, в область виджетов или на страницу? спасибо большое - так впечатлен вашими знаниями - большой лук

James Donald 02.04.2018 13:03

Другие вопросы по теме