Я создал дополнительные продукты для продуктов в моей корзине. Я связываю каждый продукт с изображением, сохраненным в файловой системе, поэтому при просмотре заказа вы можете увидеть изображение, созданное с продуктом.
![order with image association](https://i.stack.imgur.com/aeALm.jpg)
При сохранении изображения элемент корзины получает пользовательский ключ. Этот пользовательский ключ используется в файле cookie для переноса пути к изображению в процессе оформления заказа
if (!function_exists('force_individual_cart_items')) {
function force_individual_cart_items( $cart_item_data, $product_id ){
$unique_cart_item_key = md5( microtime().rand() );
$cart_item_data['unique_key'] = $unique_cart_item_key;
if (isset($_COOKIE['CustomImagePath'])) {// if image path exists that needs to be saved
$imagePath = $_COOKIE['CustomImagePath']; // get image path
$imagePaths = (isset($_COOKIE['ImagePaths']) ? json_decode(stripslashes(html_entity_decode($_COOKIE['ImagePaths'])), true) : array());
$imagePaths[$unique_cart_item_key] = $imagePath; //asscoiate image path with product cart key
setcookie('ImagePaths', json_encode($imagePaths),0,'/'); // save association in image paths cookie
unset($_COOKIE['CustomImagePath']);
setcookie('CustomImagePath', null, -1, '/');
}
return $cart_item_data;
}
}
add_filter( 'woocommerce_add_cart_item_data','force_individual_cart_items', 10, 2 );
Когда заказ создан, я добавляю новую строку в таблицу woocommerce_item_meta с мета-ключом «Пользовательское изображение». ». Проблема, с которой я сталкиваюсь, связана с привязкой позиции заказа к cart_item_key. (в хуке woocommerce_thankyou)
global $wpdb, $wp;
$query = "SELECT order_item_id FROM wp_woocommerce_order_items WHERE order_id = $order_id";
$result = $wpdb->get_results($query, true);
$imagePaths = json_decode(stripslashes(html_entity_decode($_COOKIE['ImagePaths'])), true);
foreach ($result as $order_item) {
$item_id = $order_item->order_item_id;
}
$cart_item_custom_key = NOT AVAILABLE IN THE ORDER ITEM
$filePath = $_COOKIE[$cart_item_custom_key];
$wpdb->insert('wp_woocommerce_order_itemmeta', array('order_item_id'=>$post->ID, "meta_key"=>'Custom Image', 'meta_value'=>$filePath))
Например, скажем, пользователь выбирает 3 изображения. В корзине первый продукт будет иметь настраиваемый ключ 1, второй - настраиваемый ключ 2, а третий - 3. 3. Используя $woocommerce->cart->get_cart_contents()[cart_item_key]['unique_key'];
, я могу получить этот уникальный ключ, пока у меня есть доступ к корзине. ,Однако, как только заказ создан, у order_item этого ключа нет. Порядок один, два и три больше не имеют пользовательских ключей. Поэтому я не могу получить изображение из куки со связанным ключом.
$filePath = $_COOKIE[ ? KEY NO LONGER EXISTS ? ];
$wpdb->insert('wp_woocommerce_order_itemmeta', array('order_item_id'=>$post->ID, "meta_key"=>'Custom Image', 'meta_value'=>$filePath));
есть ли способ получить ключ, который имел этот элемент корзины, потому что элемент заказа, похоже, не имеет его?