Как разрешить загрузку с нужным расширением файла docx

Автор maxim558, 10-05-2021, 12:08:14

« назад - далее »

maxim558Topic starter

Используется бесплатный плагин "Заказать в один клик для WooCommerce". При оформлении заказа есть поле для возможности покупателем прикрепить файл (скриншот), например загрузить реквизиты. Этот файл прикрепляется к заказу и ссылка на него указывается в заказах и письме.

Проблема в том, что прикрепляются не все файлы. Например, прикрепляются jpg, doc, pdf. А вот docx, xls, xlsx уже не загружаются (не прикрепляются).

Обратился к разработчику, на что он ответил, что чтобы включить поддержку всех типов файлов нужно использовать хуки:


  • coderun_oneclickwoo_file_valid_extension - позволит добавить нужное расширение файла;
  • coderun_oneclickwoo_file_valid_mime_types - позволит добавить нужный mime тип файла.

С mime типом файла, вроде, как понятно, в интернете много решений для разрешения загрузки разных типов файлов. Получается вроде того:

function upload_allow_types_doc( $mimes ) {
// разрешаем новые типы
$mimes['doc']  = 'application/msword';
$mimes['docx']  = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
$mimes['xls'] = 'application/excel';
$mimes['xlsx'] = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
$mimes['djv']  = 'image/vnd.djvu';
$mimes['djvu'] = 'image/vnd.djvu';

return $mimes;
}
add_filter( 'coderun_oneclickwoo_file_valid_mime_types', 'upload_allow_types_doc' );


А вот, что делать с coderun_oneclickwoo_file_valid_extension непонятно. Что за "нужное расширение файла"? Пытался гуглить, но выдает информацию только по mime-типам.


Val_Ery

maxim558,
В плагине buy-one-click-woocommerce есть функция check_restriction (см. loadfile.php плагина, строка 123), в которой загружаемые файлы проходят некую проверку. Например, строка 137 - get_valid_extension - проверка расширения файла, а строка 145 - get_valid_mime_types - проверка mime типа.

Дальше, ищите по каталогу плагина функцию get_valid_extension. Она описана в том же файле, строка 163
function get_valid_extension() {
  $result = array('jpeg', 'jpg', 'png', 'gif', 'bmp', 'pdf', 'doc', 'ppt');
  return apply_filters('coderun_oneclickwoo_file_valid_extension', $result);
}


Вот они, разрешенные для использования в этом плагине расширения! Добавляете свои...

Функция get_valid_mime_types. Также поиском находите, что описана она на строке 169 файла loadfile.php
function get_valid_mime_types() {
  $result = array(
    'image/gif',
    'image/jpeg',
    'image/pjpeg',
    'image/png',
    'image/tiff',
    'image/vnd.wap.wbmp',
    'image/webp',
    'ppt',
    'text/csv',
    'text/plain',
    'text/xml',
    'application/vnd.oasis.opendocument.text',
    'application/vnd.oasis.opendocument.spreadsheet',
    'application/vnd.oasis.opendocument.presentation',
    'application/vnd.oasis.opendocument.graphics',
    'application/vnd.ms-excel',
    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    'application/vnd.ms-powerpoint',
    'application/msword',
    'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
    'application/x-rar-compressed',
    'application/x-tar',
    'application/pdf',
    'application/xml-dtd',
    'application/zip',
    'application/gzip',
    'application/xml',
    'application/msword',
  );

  return apply_filters('coderun_oneclickwoo_file_valid_mime_types', $result);
}


Здесь перечислен весь список mime-типов, который авторы плагина смогли составить :) Обратите внимание на строку application/vnd.openxmlformats-officedocument.wordprocessingml.document - это и есть ваш docx.

По итогу...
Mime тип для docx в плагине уже прописан. Вам остается только добавить соответствующее расширение (extension) в массив (см. первый код). Ну, или можете через apply_filter добавлять docx...

Еще. Здесь - https://www.freeformatter.com/mime-types-list.html - список mime типов, вдруг понадобиться
  •  


maxim558Topic starter

Цитата: Val_Ery от 10-05-2021, 21:49:48
Дальше, ищите по каталогу плагина функцию get_valid_extension. Она описана в том же файле, строка 163
function get_valid_extension() {
  $result = array('jpeg', 'jpg', 'png', 'gif', 'bmp', 'pdf', 'doc', 'ppt');
  return apply_filters('coderun_oneclickwoo_file_valid_extension', $result);
}


Спасибо за помощь.
Как раз и сам разработчик ответил. Не хватало вот этого:


function filter_function_name_7473( $valid_filetypes ){
$valid_filetypes[]  = 'docx';
$valid_filetypes[]  = 'xls';
$valid_filetypes[] = 'xlsx';
return $valid_filetypes;}

add_filter( 'coderun_oneclickwoo_file_valid_extension', 'filter_function_name_7473' );