Как можно добавить дополнительное поле для скачиваемого файла Woocommerce?

В Woocommerce есть несколько способов добавления дополнительных полей для скачиваемых файлов. Я расскажу о двух наиболее распространенных способах в этом ответе.

1. Использование дополнительного плагина:
Шаг 1: Установите и активируйте плагин Advanced Custom Fields (ACF) из репозитория WordPress или с официального сайта.
Шаг 2: Создайте новую пользовательскую группу полей, чтобы добавить дополнительное поле.
Шаг 3: Добавьте новое поле типа "файл" в группу полей, установите метку и название поля.
Шаг 4: Используйте функцию get_field () в теме вашего сайта, чтобы отобразить это дополнительное поле на странице товара.
Шаг 5: Настройте шаблон для отображения скачиваемых файлов с помощью нового поля.

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

/**
 * Добавление дополнительного поля скачиваемого файла на странице товара
 */
function add_custom_file_field() {
  echo '<div class="custom-file-field">';
  woocommerce_form_field( 'custom_file', array(
    'type'        => 'file',
    'class'       => array('my-custom-file-class form-row-wide'),
    'label'       => __('Custom File'),
    'required'    => false,
   ), get_post_meta( get_the_ID(), 'custom_file', true ));
  echo '</div>';
}
add_action( 'woocommerce_before_add_to_cart_button', 'add_custom_file_field' );

/**
 * Сохранение значения дополнительного поля скачиваемого файла
 */
function save_custom_file_field( $cart_item_data, $product_id ) {
  if( isset($_FILES['custom_file']['name']) && !empty($_FILES['custom_file']['name']) ) {
    $upload = wp_upload_bits( $_FILES['custom_file']['name'], null, file_get_contents( $_FILES['custom_file']['tmp_name'] ) );
    
    if( isset($upload['error']) && $upload['error'] != 0 ) {
      wc_add_notice( __('There was an error uploading the file, please try again.') );
    } else {
      $cart_item_data[ 'custom_file' ] = $upload;
    }   
  }
  return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'save_custom_file_field', 10, 2 );

/**
 * Отображение значения дополнительного поля скачиваемого файла на странице оформления заказа
 */
function display_custom_file_field_data( $item_data, $cart_item ) {
  if( !empty($cart_item['custom_file'] ) ){
    $item_data[] = array(
      'key'   => 'Custom File',
      'value' => $cart_item['custom_file']['url'],
    );
  }
  return $item_data;
}
add_filter( 'woocommerce_get_item_data', 'display_custom_file_field_data', 10, 2 );

Шаг 3: Сохраните файл функций и обновите сайт.
Шаг 4: Теперь на странице товара будет отображаться дополнительное поле для скачиваемого файла.

Оба способа дают вам возможность добавлять дополнительные поля для скачиваемых файлов в Woocommerce. Вам нужно выбрать тот, который лучше подходит для вашей конкретной ситуации и требований.