// } // Display upload field on product page add_action('woocommerce_before_add_to_cart_button', 'custom_upload_field'); function custom_upload_field() { echo '
'; } // Validate the uploaded file add_filter('woocommerce_add_to_cart_validation', 'validate_custom_upload_field', 10, 3); function validate_custom_upload_field($passed, $product_id, $quantity) { if (isset($_FILES['custom_upload_file']) && $_FILES['custom_upload_file']['error'] !== UPLOAD_ERR_NO_FILE) { $filetype = wp_check_filetype($_FILES['custom_upload_file']['name']); $allowed = ['jpg', 'jpeg', 'png', 'pdf']; if (!in_array($filetype['ext'], $allowed)) { wc_add_notice('Only JPG, PNG, or PDF files are allowed.', 'error'); return false; } } return $passed; } // Save uploaded file & attach to cart item add_filter('woocommerce_add_cart_item_data', 'save_custom_file_data', 10, 2); function save_custom_file_data($cart_item_data, $product_id) { if (!empty($_FILES['custom_upload_file']['name'])) { $upload = wp_upload_bits($_FILES['custom_upload_file']['name'], null, file_get_contents($_FILES['custom_upload_file']['tmp_name'])); if (!$upload['error']) { $cart_item_data['custom_upload_file'] = $upload['url']; } } return $cart_item_data; } // Display uploaded file info in cart and checkout add_filter('woocommerce_get_item_data', 'display_custom_file_cart_checkout', 10, 2); function display_custom_file_cart_checkout($item_data, $cart_item) { if (isset($cart_item['custom_upload_file'])) { $item_data[] = [ 'key' => 'Uploaded File', 'value' => 'View File', ]; } return $item_data; } // Save upload to order meta add_action('woocommerce_add_order_item_meta', 'save_file_to_order_meta', 10, 3); function save_file_to_order_meta($item_id, $values, $cart_item_key) { if (isset($values['custom_upload_file'])) { wc_add_order_item_meta($item_id, 'Uploaded File', $values['custom_upload_file']); } }