У меня есть собственный плагин, который позволяет клиенту добавлять пользовательскую информацию в свой заказ.
Товар добавлен в корзину, а пользовательские данные отображаются на странице корзины.Однако пользовательская информация не переносится на страницу заказов на серверной части.В идеале я хотел бы, чтобы пользовательские данные были добавлены в электронное письмо с заказом клиента.
Текущий код выглядит следующим образом:
<?php
function wcpc_save_custom_product_field( $cart_item_data, $product_id ) {
if( isset( $_REQUEST['wcpc_custom_product'] ) ) {
$cart_item_data[ 'wcpc_custom_product' ] = $_REQUEST['wcpc_custom_product'];
$cart_item_data[ 'wcpc_custom_price' ] = $_REQUEST['wcpc_custom_price'];
/* below statement make sure every add to cart action as unique line item */
$cart_item_data['unique_key'] = md5( microtime().rand() );
}
return $cart_item_data;
}
add_action( 'woocommerce_add_cart_item_data', 'wcpc_save_custom_product_field', 10, 2 );
function render_meta_on_cart_and_checkout( $cart_data, $cart_item = null ) {
$custom_items = array();
/* Woo 2.4.2 updates */
if( !empty( $cart_data ) ) {
$custom_items = $cart_data;
}
if( isset( $cart_item['wcpc_custom_product'] ) && $cart_item['wcpc_custom_product'] != '' ) {
$custom_items[] = array( "name" => 'Custom', "value" => $cart_item['wcpc_custom_product'] );
}
return $custom_items;
}
add_filter( 'woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 10, 2 );
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
// This is necessary for WC 3.0+
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
foreach ( $cart_object->get_cart() as $key => $value ) {
if(isset($value['wcpc_custom_price'])) {
$value['data']->set_price( $value['wcpc_custom_price'] );
}
}
}
?>
Я попытался изменить фрагмент кода, который я нашел в Интернете, и добавить его к приведенному выше коду.Однако, когда я реализую это, корзина ломается совсем:
function wcpc_order_item_product( $cart_item, $order_item ){
if( isset( $order_item['wcpc_custom_product'] ) ){
$cart_item_meta['wcpc_custom_product'] = $order_item['wcpc_custom_product'];
}
return $cart_item;
}
add_filter( 'woocommerce_order_item_product', 'wcpc_order_item_product', 10, 2 );
Любая помощь будет принята с благодарностью.У меня не так много опыта программирования, и я изо всех сил пытаюсь найти способ заставить это работать.