|
@@ -17,9 +17,16 @@ class Studiou_WC_FPP_Cart {
|
|
|
// Display uploaded file info in cart
|
|
// Display uploaded file info in cart
|
|
|
add_filter('woocommerce_get_item_data', array($this, 'display_cart_item_data'), 10, 2);
|
|
add_filter('woocommerce_get_item_data', array($this, 'display_cart_item_data'), 10, 2);
|
|
|
|
|
|
|
|
- // Replace cart item thumbnail with uploaded image
|
|
|
|
|
|
|
+ // Replace cart item thumbnail with uploaded image (classic cart)
|
|
|
add_filter('woocommerce_cart_item_thumbnail', array($this, 'cart_item_thumbnail'), 10, 3);
|
|
add_filter('woocommerce_cart_item_thumbnail', array($this, 'cart_item_thumbnail'), 10, 3);
|
|
|
|
|
|
|
|
|
|
+ // Show uploaded photo preview directly after item name in cart (classic cart)
|
|
|
|
|
+ add_action('woocommerce_after_cart_item_name', array($this, 'show_cart_item_photo_preview'), 10, 2);
|
|
|
|
|
+
|
|
|
|
|
+ // Override product image for block cart (Store API) — returns uploaded photo as product image
|
|
|
|
|
+ add_filter('woocommerce_product_get_image_id', array($this, 'override_product_image_for_cart'), 10, 2);
|
|
|
|
|
+ add_filter('woocommerce_product_variation_get_image_id', array($this, 'override_product_image_for_cart'), 10, 2);
|
|
|
|
|
+
|
|
|
// Save file reference to order item
|
|
// Save file reference to order item
|
|
|
add_action('woocommerce_checkout_create_order_line_item', array($this, 'save_order_item_meta'), 10, 4);
|
|
add_action('woocommerce_checkout_create_order_line_item', array($this, 'save_order_item_meta'), 10, 4);
|
|
|
|
|
|
|
@@ -50,6 +57,7 @@ class Studiou_WC_FPP_Cart {
|
|
|
$attachment_id = WC()->session->get('studiou_fpp_attachment_id');
|
|
$attachment_id = WC()->session->get('studiou_fpp_attachment_id');
|
|
|
$file_record_id = WC()->session->get('studiou_fpp_file_record_id');
|
|
$file_record_id = WC()->session->get('studiou_fpp_file_record_id');
|
|
|
$file_name = WC()->session->get('studiou_fpp_file_name');
|
|
$file_name = WC()->session->get('studiou_fpp_file_name');
|
|
|
|
|
+ $thumb_url = WC()->session->get('studiou_fpp_thumb_url');
|
|
|
|
|
|
|
|
if (!$attachment_id || !$file_record_id) {
|
|
if (!$attachment_id || !$file_record_id) {
|
|
|
return $cart_item_data;
|
|
return $cart_item_data;
|
|
@@ -64,6 +72,7 @@ class Studiou_WC_FPP_Cart {
|
|
|
$cart_item_data['studiou_fpp_attachment_id'] = $attachment_id;
|
|
$cart_item_data['studiou_fpp_attachment_id'] = $attachment_id;
|
|
|
$cart_item_data['studiou_fpp_file_record_id'] = $file_record_id;
|
|
$cart_item_data['studiou_fpp_file_record_id'] = $file_record_id;
|
|
|
$cart_item_data['studiou_fpp_file_name'] = $file_name ?: $record->file_name;
|
|
$cart_item_data['studiou_fpp_file_name'] = $file_name ?: $record->file_name;
|
|
|
|
|
+ $cart_item_data['studiou_fpp_thumb_url'] = $thumb_url ?: '';
|
|
|
|
|
|
|
|
// Update file record with variation
|
|
// Update file record with variation
|
|
|
$actual_variation_id = $variation_id ?: $product_id;
|
|
$actual_variation_id = $variation_id ?: $product_id;
|
|
@@ -76,15 +85,45 @@ class Studiou_WC_FPP_Cart {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public function cart_item_thumbnail($thumbnail, $cart_item, $cart_item_key) {
|
|
public function cart_item_thumbnail($thumbnail, $cart_item, $cart_item_key) {
|
|
|
- if (!empty($cart_item['studiou_fpp_attachment_id'])) {
|
|
|
|
|
- $image = wp_get_attachment_image($cart_item['studiou_fpp_attachment_id'], 'woocommerce_thumbnail');
|
|
|
|
|
- if ($image) {
|
|
|
|
|
- return $image;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ $url = $this->get_cart_item_thumb_url($cart_item);
|
|
|
|
|
+ if ($url) {
|
|
|
|
|
+ $alt = isset($cart_item['studiou_fpp_file_name']) ? esc_attr($cart_item['studiou_fpp_file_name']) : '';
|
|
|
|
|
+ return '<img src="' . esc_url($url) . '" alt="' . $alt . '" class="attachment-woocommerce_thumbnail" />';
|
|
|
}
|
|
}
|
|
|
return $thumbnail;
|
|
return $thumbnail;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * Override product/variation image_id when rendered in cart context (block cart / Store API).
|
|
|
|
|
+ * Returns the uploaded photo attachment_id so the block cart shows it instead of placeholder.
|
|
|
|
|
+ */
|
|
|
|
|
+ public function override_product_image_for_cart($image_id, $product) {
|
|
|
|
|
+ if (!WC()->cart) {
|
|
|
|
|
+ return $image_id;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $product_id = $product->get_id();
|
|
|
|
|
+
|
|
|
|
|
+ foreach (WC()->cart->get_cart() as $cart_item) {
|
|
|
|
|
+ if (empty($cart_item['studiou_fpp_attachment_id'])) {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $match = false;
|
|
|
|
|
+ if (isset($cart_item['variation_id']) && $cart_item['variation_id'] == $product_id) {
|
|
|
|
|
+ $match = true;
|
|
|
|
|
+ } elseif ($cart_item['product_id'] == $product_id) {
|
|
|
|
|
+ $match = true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if ($match) {
|
|
|
|
|
+ return (int) $cart_item['studiou_fpp_attachment_id'];
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return $image_id;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public function display_cart_item_data($item_data, $cart_item) {
|
|
public function display_cart_item_data($item_data, $cart_item) {
|
|
|
if (isset($cart_item['studiou_fpp_file_name'])) {
|
|
if (isset($cart_item['studiou_fpp_file_name'])) {
|
|
|
$item_data[] = array(
|
|
$item_data[] = array(
|
|
@@ -96,6 +135,37 @@ class Studiou_WC_FPP_Cart {
|
|
|
return $item_data;
|
|
return $item_data;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public function show_cart_item_photo_preview($cart_item, $cart_item_key) {
|
|
|
|
|
+ $url = $this->get_cart_item_thumb_url($cart_item);
|
|
|
|
|
+ if ($url) {
|
|
|
|
|
+ echo '<div class="studiou-fpp-cart-preview">';
|
|
|
|
|
+ echo '<img src="' . esc_url($url) . '" alt="' . esc_attr($cart_item['studiou_fpp_file_name'] ?? '') . '" />';
|
|
|
|
|
+ echo '</div>';
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private function get_cart_item_thumb_url($cart_item) {
|
|
|
|
|
+ // 1. Use stored URL from session (most reliable)
|
|
|
|
|
+ if (!empty($cart_item['studiou_fpp_thumb_url'])) {
|
|
|
|
|
+ return $cart_item['studiou_fpp_thumb_url'];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. Try WP attachment lookup
|
|
|
|
|
+ if (!empty($cart_item['studiou_fpp_attachment_id'])) {
|
|
|
|
|
+ $att_id = (int) $cart_item['studiou_fpp_attachment_id'];
|
|
|
|
|
+ $thumb = wp_get_attachment_image_src($att_id, 'thumbnail');
|
|
|
|
|
+ if ($thumb) {
|
|
|
|
|
+ return $thumb[0];
|
|
|
|
|
+ }
|
|
|
|
|
+ $url = wp_get_attachment_url($att_id);
|
|
|
|
|
+ if ($url) {
|
|
|
|
|
+ return $url;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return '';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public function save_order_item_meta($item, $cart_item_key, $values, $order) {
|
|
public function save_order_item_meta($item, $cart_item_key, $values, $order) {
|
|
|
if (isset($values['studiou_fpp_attachment_id'])) {
|
|
if (isset($values['studiou_fpp_attachment_id'])) {
|
|
|
$item->add_meta_data('_studiou_fpp_attachment_id', $values['studiou_fpp_attachment_id']);
|
|
$item->add_meta_data('_studiou_fpp_attachment_id', $values['studiou_fpp_attachment_id']);
|
|
@@ -107,6 +177,9 @@ class Studiou_WC_FPP_Cart {
|
|
|
$item->add_meta_data('_studiou_fpp_file_name', $values['studiou_fpp_file_name']);
|
|
$item->add_meta_data('_studiou_fpp_file_name', $values['studiou_fpp_file_name']);
|
|
|
$item->add_meta_data(__('Uploaded Photo', 'studiou-wc-free-photo-product'), $values['studiou_fpp_file_name']);
|
|
$item->add_meta_data(__('Uploaded Photo', 'studiou-wc-free-photo-product'), $values['studiou_fpp_file_name']);
|
|
|
}
|
|
}
|
|
|
|
|
+ if (isset($values['studiou_fpp_thumb_url'])) {
|
|
|
|
|
+ $item->add_meta_data('_studiou_fpp_thumb_url', $values['studiou_fpp_thumb_url']);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public function link_files_to_order($order_id, $posted_data, $order) {
|
|
public function link_files_to_order($order_id, $posted_data, $order) {
|
|
@@ -119,12 +192,23 @@ class Studiou_WC_FPP_Cart {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public function admin_order_item_thumbnail($thumbnail, $item_id, $item) {
|
|
public function admin_order_item_thumbnail($thumbnail, $item_id, $item) {
|
|
|
|
|
+ // Try stored URL first
|
|
|
|
|
+ $thumb_url = $item->get_meta('_studiou_fpp_thumb_url');
|
|
|
|
|
+ if ($thumb_url) {
|
|
|
|
|
+ return '<img src="' . esc_url($thumb_url) . '" alt="" class="wc-block-components-product-image" width="50" height="50" />';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Fallback to attachment lookup
|
|
|
$attachment_id = $item->get_meta('_studiou_fpp_attachment_id');
|
|
$attachment_id = $item->get_meta('_studiou_fpp_attachment_id');
|
|
|
if ($attachment_id) {
|
|
if ($attachment_id) {
|
|
|
$image = wp_get_attachment_image($attachment_id, 'thumbnail');
|
|
$image = wp_get_attachment_image($attachment_id, 'thumbnail');
|
|
|
if ($image) {
|
|
if ($image) {
|
|
|
return $image;
|
|
return $image;
|
|
|
}
|
|
}
|
|
|
|
|
+ $url = wp_get_attachment_url($attachment_id);
|
|
|
|
|
+ if ($url) {
|
|
|
|
|
+ return '<img src="' . esc_url($url) . '" alt="" width="50" height="50" />';
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
return $thumbnail;
|
|
return $thumbnail;
|
|
|
}
|
|
}
|