В 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>';
}






Следующее будет отображать общий объем корзины на странице корзины и оформления заказа:
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 вашей активной дочерней темы (или активной темы). Проверено и работает.
Привет - есть ли код, который я могу использовать для вставки таблицы с общим объемом, скажем, в область виджетов или на страницу? спасибо большое - так впечатлен вашими знаниями - большой лук
Можно сделать так, чтобы настраиваемое поле объема автоматически вычислялось на уровне продукта на основе значений размеров продукта ... Если это вас интересует, вы можете задать новый связанный вопрос и уведомить меня здесь ... Тогда я отвечу на него.