// 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']);
}
}