• Здравствуйте, сделал для товара кастомное поле загрузки изображения, изображение загружается. Сделал замену миниатюры в корзине и добавил поле, ссылку на изображение, в мини корзине меняется миниатюра и появляется ссылка на изображение, все работает, когда открываешь основную корзину миниатюра пропадает, появляется стандартная от товара, ссылка становиться не кликабельной, а в заказе тоже ссылка не работает

    <?php
    /*
    Plugin Name: Image Upload for Variations
    Plugin URI: https://yourwebsite.com/
    Description: Плагин для загрузки изображения для вариативных товаров в WooCommerce.
    Version: 1.1
    Author: Ваше имя
    Author URI: https://yourwebsite.com/
    Text Domain: image-upload-for-variations
    */

    if (!defined('ABSPATH')) {
    exit; // Защита от прямого доступа
    }

    require_once plugin_dir_path(__FILE__) . 'frontend-functions.php';

    // Подключаем AJAX и передаём nonce
    function enqueue_frontend_assets() {
    wp_enqueue_script('upload-field-frontend-js', plugin_dir_url(__FILE__) . 'upload.js', ['jquery'], null, true);
    wp_localize_script('upload-field-frontend-js', 'upload_field_ajax', [
    'ajaxurl' => admin_url('admin-ajax.php'),
    'nonce' => wp_create_nonce('upload_field_nonce')
    ]);
    }
    add_action('wp_enqueue_scripts', 'enqueue_frontend_assets');

    // 1. Добавляем поле загрузки изображения на страницу товара
    function iuv_add_image_upload_field() {
    if (!is_product()) return;

    global $post;
    $product = wc_get_product($post->ID);
    if (!$product) return;

    // Получаем артикул товара
    $product_sku = $product->get_sku();

    // Проверяем, содержит ли артикул "231913022025" (частичное совпадение)
    if (strpos($product_sku, '231913022025') !== false) {
    ?>
    <div class="woocommerce-custom-upload">
    <label for="custom_image_upload"><?php _e('Upload Image for Printing', 'image-upload-for-variations'); ?></label>
    <input type="file" id="custom_image_upload" name="custom_image_upload" accept="image/*">
    <button type="button" id="upload_image_button"><?php _e('Upload Image', 'image-upload-for-variations'); ?></button>
    <div id="upload_status"></div>
    <img id="uploaded_preview" src="" style="max-width: 100px; display: none;">
    <input type="hidden" name="uploaded_image_url" id="uploaded_image_url">
    </div>

    <?php
    }
    }
    add_action('woocommerce_before_add_to_cart_button', 'iuv_add_image_upload_field');

    // 2. Обработчик загрузки изображения в WP
    function iuv_handle_image_upload() {
    check_ajax_referer('upload_field_nonce', 'nonce'); // Проверяем nonce

    if (!isset($_FILES['custom_image_upload'])) {
    wp_send_json_error(['error' => 'No file uploaded.']);
    return;
    }

    $file = $_FILES['custom_image_upload'];
    $upload = wp_handle_upload($file, ['test_form' => false]);

    if (isset($upload['error'])) {
    wp_send_json_error(['error' => $upload['error']]);
    return;
    }

    if (!isset($upload['url'])) {
    wp_send_json_error(['error' => 'Upload failed, no URL returned.']);
    return;
    }

    wp_send_json_success(['url' => esc_url($upload['url'])]);
    }
    add_action('wp_ajax_iuv_upload_image', 'iuv_handle_image_upload');
    add_action('wp_ajax_nopriv_iuv_upload_image', 'iuv_handle_image_upload');


    function iuv_add_uploaded_image_to_cart($cart_item_data, $product_id) {
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['uploaded_image_url'])) {
    error_log('Uploaded image URL: ' . $_POST['uploaded_image_url']);
    $cart_item_data['custom_image'] = esc_url_raw($_POST['uploaded_image_url']);
    }
    return $cart_item_data;
    }
    add_filter('woocommerce_add_cart_item_data', 'iuv_add_uploaded_image_to_cart', 10, 2);



    function get_cart_item_from_session($cart_item, $values) {
    if (isset($values['custom_image'])) {
    error_log('Session custom_image: ' . $values['custom_image']);
    $cart_item['custom_image'] = esc_url_raw($values['custom_image']);
    }
    return $cart_item;
    }
    add_filter('woocommerce_get_cart_item_from_session', 'get_cart_item_from_session', 10, 2);


    function iuv_replace_cart_thumbnail($product_image, $cart_item, $cart_item_key) {
    if (!empty($cart_item['custom_image'])) {
    error_log('Replacing thumbnail for item ' . $cart_item_key . "old ".$product_image . 'new <img src="' . esc_url($cart_item['custom_image']) . '" alt="Uploaded Image" style="max-width: 60px; height: auto; object-fit: cover;">');
    return '<img src="' . esc_url($cart_item['custom_image']) . '" alt="Uploaded Image" style="max-width: 60px; height: auto; object-fit: cover;">';
    }
    return $product_image;
    }
    add_filter('woocommerce_cart_item_thumbnail', 'iuv_replace_cart_thumbnail', 99, 3);


    function iuv_display_uploaded_image_in_cart($item_data, $cart_item) {
    if (!empty($cart_item['custom_image'])) {
    error_log('Adding image link to cart item data'); // Логируем добавление
    $item_data[] = array(
    'key' => __('Uploaded Image', 'image-upload-for-variations'),
    'value' => '<a href="' . esc_url($cart_item['custom_image']) . '" target="_blank">' . __('View Image', 'image-upload-for-variations') . '</a>',
    'display' => '<a href="' . esc_url($cart_item['custom_image']) . '" target="_blank">' . __('View Image', 'image-upload-for-variations') . '</a>'
    );
    }
    return $item_data;
    }
    add_filter('woocommerce_get_item_data', 'iuv_display_uploaded_image_in_cart', 5, 2);

    // 5. Сохраняем изображение в заказе
    function iuv_save_uploaded_image_in_order($item, $cart_item_key, $values, $order) {
    if (!empty($values['custom_image'])) {
    $item->add_meta_data('Изображение', '<a href="' . esc_url($values['custom_image']) . '" target="_blank">Посмотреть</a>');
    }
    }
    add_action('woocommerce_checkout_create_order_line_item', 'iuv_save_uploaded_image_in_order', 10, 4);

    function iuv_display_uploaded_image_in_order($item_id, $item, $order) {
    $uploaded_image = $item->get_meta('Uploaded Image');
    if (!empty($uploaded_image)) {
    echo '<p><strong>Загруженное изображение:</strong><br><img src="' . esc_url($uploaded_image) . '" style="max-width: 60px; height: auto;"></p>';
    }
    }
    add_action('woocommerce_order_item_meta_end', 'iuv_display_uploaded_image_in_order', 10, 3);
    • Тема изменена 4 месяца назад пользователем kharindev.
Просмотр 2 ответов — с 1 по 2 (всего 2)
  • kharindev, привет. Какую задачу вы изначально хотите решить? Код сгенерирован нейросетью?

    Автор kharindev

    (@kharindev)

    Код подправлен нейросетью, задача

    1. Заменить миниатюру в мини корзине и корзине
    2. добавить ссылку на загруженное фото в корзину и заказ

    Заметил, что woocommerce_cart_item_thumbnail не всегда срабатывает, он срабатывает при добавлении в корзину в мини корзине, а когда открываешь основную он не работает.

Просмотр 2 ответов — с 1 по 2 (всего 2)