Как добавить загрузку файла в кассу WooCommerce?Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как добавить загрузку файла в кассу WooCommerce?

Сообщение Anonymous »

Страница оформления заказа WooCommerce изначально не поддерживает добавление поля загрузки файла в качестве возможного поля по соображениям безопасности. Я хочу добавить поле загрузки файла на страницу оформления заказа, чтобы клиент мог предоставить нам документ, который затем можно будет прикрепить к его заказу, и администраторы снова смогут ссылаться на него через панель управления заказами в будущем, если нам понадобится.< /p>
Я попробовал два разных метода, но оба зашли в тупик. Я попробовал два разных решения:
  • Форма загрузки Gravity Forms — попробовал отобразить форму Gravity Forms на странице оформления заказа с помощью хука и поля файла. данные никогда не будут отображаться в $_FILES или $_POST.
  • Загрузить поле с помощью ajax — попробовал создать поле загрузки, а затем использовать ajax для отправки данных поля загрузки в функцию ajax WordPress, но Проблема с этим подходом заключается в том, что вы не можете проверить размер файла/если файл уже загружен. Таким образом, пользователь потенциально может загружать очень большие файлы или может испортить место хранения файла из-за добавления пути загрузки файла в HTML элемента загрузки файла, например:

Код: Выделить всё

add_action( 'wp_ajax_mishaupload', 'misha_file_upload' );
add_action( 'wp_ajax_nopriv_mishaupload', 'misha_file_upload' );

function misha_file_upload(){

$upload_dir = wp_upload_dir();

if ( isset( $_FILES[ 'misha_file' ] ) ) {
$path = $upload_dir[ 'path' ] . '/' . basename( $_FILES[ 'misha_file' ][ 'name' ] );

if( move_uploaded_file( $_FILES[ 'misha_file' ][ 'tmp_name' ], $path ) ) {
echo $upload_dir[ 'url' ] . '/' . basename( $_FILES[ 'misha_file' ][ 'name' ] );
}
}
die;
}
где строка echo $upload_dir[ 'url'] . '/' . basename( $_FILES[ 'misha_file' ][ 'name' ] ); добавляет каталог файлов в часть value= входного элемента, что не идеально с точки зрения безопасности.
Затем я дошел до того момента, когда теперь могу добавлять поля типа «файл» с помощью следующего кода:

Код: Выделить всё

/**
* Function for `woocommerce_form_field` filter-hook.
*
* @param  $field
* @param  $key
* @param  $args
* @param  $value
*
* @return
*/
function wp_kama_woocommerce_form_field_filter( $field, $key, $args, $value ){

// check if field is a file field
if( $args['type'] == 'file' ){
// add custom HTML to the field
$field = '';
$field .= '
';
$field .= 'Upload Certificate';
$field .= '';

$field .= sprintf(
'',
esc_attr( implode( ' ', $args['class'] ) ),
esc_attr( $key ),
esc_attr( $args['id'] ),
);

$field .= '';
$field .= '
';
$field .= '';
}

return $field;
}
add_filter( 'woocommerce_form_field', 'wp_kama_woocommerce_form_field_filter', 10, 4 );
Приведенный выше код позволяет мне сделать следующее в другом хуке:

Код: Выделить всё

function add_custom_checkout_field($checkout) {
woocommerce_form_field('certificate_file_upload', array(
'type' => 'file',
'class' => array('form-row-wide'),
'label' => __('Upload Certificate'),
'required' => false,
), $checkout->get_value('certificate_file_upload'));
}
add_action( 'woocommerce_after_order_notes', 'add_custom_checkout_field' );
который затем этот код добавляет поле файла на страницу оформления заказа. Проблема на данный момент заключается в том, что ни $_FILES, ни $_POST не имеют никаких данных файла, связанных с ключом «certificate_file_upload», что является проблемой при попытке сделать что-либо с самими данными файла.
Я пробовал поискать, как WooCommerce работает с полями оформления заказа по умолчанию, чтобы увидеть, как я могу добавить данные своего файла в $_FILES/$_POST, но все, что я придумал, это то, что они управляют данными возможно через плагин WooCommerce:
woocommerce->assets->js->frontend->checkout.js
но я не знаю, как это сделать добавление поддержки файлов на страницу оформления заказа после этого момента без изменения их файлов (которые будут переопределяться при каждом обновлении плагина), если это даже правильный файл, в котором это можно делать.
Есть ли checkout.js - файл, который мне следует просмотреть в первую очередь, чтобы добавить данные моего файла в $_FILES, или мне следует искать где-то еще? Если checkout.js — это правильный файл, который мне следует просмотреть, есть ли способ изменить его файл, чтобы разрешить добавление данных моего файла в $_FILES?
Я хотел бы избежать мне приходится загружать плагин только для того, чтобы сделать возможной загрузку файлов на страницу оформления заказа, поскольку я пытаюсь избежать раздувания, но если это единственное решение, я думаю, я воспользуюсь этим, если это невозможно исправить.

Подробнее здесь: https://stackoverflow.com/questions/766 ... e-checkout
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как добавить загрузку файла в кассу WooCommerce?
    Anonymous » » в форуме Php
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Как добавить загрузку файла в кассу WooCommerce?
    Anonymous » » в форуме Jquery
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Как получить зарплату с использованием Adeptive PayPal и успешно оформлять за кассу?
    Anonymous » » в форуме Php
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • FastAPI выдает ошибку 422 при попытке добавить загрузку файла [дубликат]
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Laravel: Как проверить загрузку файла с помощью реального файла?
    Anonymous » » в форуме Php
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»