Как можно добавить индивидуальное поле для загрузки файлов в карточку товара в WooCommerce?

Как можно реализовать загрузку различных документов (pdf, jpg, .docx) к каждому товару, если в товарах уже используются рабочие текстовые кастомные поля, но примеров реализации загрузчика файлов и их отображения не удается найти?
  • 18 декабря 2024 г. 15:33
Ответы на вопрос 2
Чтобы добавить индивидуальное поле для загрузки файлов к карточке товара в WooCommerce, вы можете использовать пользовательские поля (custom fields) и соответствующие хуки. Вот шаги, которые помогут вам реализовать эту функциональность:

### Шаг 1: Добавьте поле загрузки файла в админке товара

Для начала, нужно добавить пользовательское поле для загрузки файла на страницу редактирования товара. Это можно сделать с помощью фильтра `woocommerce_product_options_general_product_data`.

Вставьте следующий код в файл `functions.php` вашей темы (или используйте плагин для пользовательских функций):

```php
add_action('woocommerce_product_options_general_product_data', 'add_custom_file_upload_field');

function add_custom_file_upload_field() {
    woocommerce_wp_text_input(array(
        'id' => 'custom_file_upload',
        'label' => __('Upload File', 'woocommerce'),
        'description' => __('Upload a file (pdf, jpg, docx)', 'woocommerce'),
        'desc_tip' => true,
    ));
}
```

### Шаг 2: Сохраните загруженный файл

Теперь нужно сохранить загруженный файл, когда продукт будет обновлен. Для этого используем хук `woocommerce_process_product_meta`.

```php
add_action('woocommerce_process_product_meta', 'save_custom_file_upload_field');

function save_custom_file_upload_field($post_id) {
    if (isset($_POST['custom_file_upload'])) {
        update_post_meta($post_id, 'custom_file_upload', sanitize_text_field($_POST['custom_file_upload']));
    }
}
```

### Шаг 3: Отобразите загруженный файл на странице товара

Чтобы отобразить загруженный файл на странице товара, вам нужно использовать хук `woocommerce_single_product_summary`.

```php
add_action('woocommerce_single_product_summary', 'display_custom_file_upload_field', 25);

function display_custom_file_upload_field() {
    global $post;
    $file_url = get_post_meta($post->ID, 'custom_file_upload', true);
    
    if ($file_url) {
        echo '<a href="'.esc_url($file_url).'" target="_blank">'.__('Download File', 'woocommerce').'</a>';
    }
}
```

### Шаг 4: Добавьте функцию загрузки файлов

Если вам нужно добавить функцию выбора файлов, вам нужно использовать JavaScript и дополнительные функции. Общий принцип такой:

1. Используйте `<input type="file">` в вашем поле загрузки.
2. Используйте JavaScript для загрузки файла на сервер (пример: ajax-загрузка).
3. Сохраните путь к загруженному файлу аналогично указанию пути в шаге 2.

### Полезные ссылки и ресурсы

- [Документация WooCommerce](https://docs.woocommerce.com/)
- [Функции WordPress для работы с медиа](https://developer.wordpress.org/reference/functions/media_handle_upload/)
- [AJAX в WordPress](https://developer.wordpress.org/plugins/javascript/ajax/)

Этот базовый пример позволяет вам начать. Вы можете доработать его по мере необходимости, добавив дополнительные проверки, ограничения на тип файлов и другие функции.
попробуй выгрузить товар где уже есть доп файлы. И посмотреть какое поле за них отвечает
Похожие вопросы