/ Плагины / Приложить к товару файл

Приложить к товару файл

HIT

14.04.2021

2226

Рассмотрим какие существуют решение по добавлению к товару файлов: изображений, текстов и прочего.

Customer Upload Files for WooCommerce

Платное решение от Woo за 49$ (14.04.2021). Включает функционал по добавлению файла(ов) к любому товару, или к заказу.

WooCommerce Product Add-Ons Ultimate (pluginrepublic)

69$ (14.04.2021), но лицензию нужно продлевать каждый год. Бессрочный стоит 169$. Функционал позволяет заводить у товара любые типы полей, в т.ч. вложение файла.

YITH WooCommerce Product Add-Ons Premium

€ 99,99. Плагин дает возможность добавить к товару любые поля, данные из которых будут прикреплены к товару.

Product Add-Ons

Аналогичный с предыдущим плагин от Woo, стоимостью 49$.

WooCommerce Upload Files (vanquish)

Еще одно решение по добавлению полей в товар. Стоимость $29 (14.04.2021).

WooCommerce Drop Uploader — Drag&Drop File Uploader Addon

Плагин по вложению к товару изображений пачкой, путем перетягивания на экран. Стоимость 21$.

Checkout Files Upload for WooCommerce

Автор: WP Wham, 8000 установок.

Бесплатный плагин. Функционал отличный. Добавляет поле для вложения файла, причем можно настраивать типы файлов и ограничивать размер. Единственным небольшим минусом является то, что поле добавляется не в группу полей заказчика, а перед или после оформления.

Чтобы добавить выводить поле в другом расположении, нужно в файле checkout-files-upload-woocommerce/includes/settings/class-alg-wc-checkout-files-upload-settings-file.php (стр. 169-171) добавить свой хук WC. Пример:

				'options'  => array(
					'woocommerce_before_checkout_form' => __( 'Before checkout form', 'checkout-files-upload-woocommerce' ),
					'woocommerce_after_checkout_form'  => __( 'After checkout form', 'checkout-files-upload-woocommerce' ),
					'woocommerce_checkout_shipping'  => __( 'After checkout shipping', 'checkout-files-upload-woocommerce' ),
					'disable'                          => __( 'Do not add on checkout', 'checkout-files-upload-woocommerce' ),
				),

After checkout shipping это новый произвольный вариант цепляющий поле к хуку woocommerce_checkout_shipping.

Конфликт с функцией отправки письма при статусе В ожидании оплаты

add_action( 'woocommerce_checkout_order_processed', 'pending_new_order_notification', 20, 1 );
function pending_new_order_notification( $order_id ) {

    // Get an instance of the WC_Order object
    $order = wc_get_order( $order_id );

    // Only for "pending" order status
    if( ! $order->has_status( 'pending' ) ) return;

    // Send "New Email" notification (to admin)
    WC()->mailer()->get_emails()['WC_Email_New_Order']->trigger( $order_id );
}

Вложения не добавляются.

Вложение файла для товара без плагина

Данные функции нужно дорабатывать, но в целом работает. Файл прикладывается в виде вложения к товару и загружается на сайт (в медиабибиотеке не появляется, что даже является плюсом).

// Display additional product fields (+ jQuery code)
add_action( 'woocommerce_before_add_to_cart_button', 'display_additional_product_fields', 9 );
function display_additional_product_fields(){
    ?>
    <p class="form-row validate-required" id="image" >
        <label for="file_field"><?php echo __("Upload Image") . ': '; ?>
            <input type='file' name='image' accept='image/*'>
        </label>
    </p>
    <?php
}


// Add custom fields data as the cart item custom data
add_filter( 'woocommerce_add_cart_item_data', 'add_custom_fields_data_as_custom_cart_item_data', 10, 2 );
function add_custom_fields_data_as_custom_cart_item_data( $cart_item, $product_id ){
    if( isset($_FILES['image']) && ! empty($_FILES['image']) ) {
        $upload       = wp_upload_bits( $_FILES['image']['name'], null, file_get_contents( $_FILES['image']['tmp_name'] ) );
        $filetype     = wp_check_filetype( basename( $upload['file'] ), null );
        $upload_dir   = wp_upload_dir();
        $upl_base_url = is_ssl() ? str_replace('http://', 'https://', $upload_dir['baseurl']) : $upload_dir['baseurl'];
        $base_name    = basename( $upload['file'] );

        $cart_item['file_upload'] = array(
            'guid'      => $upl_base_url .'/'. _wp_relative_upload_path( $upload['file'] ), // Url
            'file_type' => $filetype['type'], // File type
            'file_name' => $base_name, // File name
            'title'     => ucfirst( preg_replace('/\.[^.]+$/', '', $base_name ) ), // Title
        );
        $cart_item['unique_key'] = md5( microtime().rand() ); // Avoid merging items
    }
    return $cart_item;
}

// Display custom cart item data in cart (optional)
add_filter( 'woocommerce_get_item_data', 'display_custom_item_data', 10, 2 );
function display_custom_item_data( $cart_item_data, $cart_item ) {
    if ( isset( $cart_item['file_upload']['title'] ) ){
        $cart_item_data[] = array(
            'name' => __( 'Image uploaded', 'woocommerce' ),
            'value' =>  str_pad($cart_item['file_upload']['title'], 16, 'X', STR_PAD_LEFT) . '…',
        );
    }
    return $cart_item_data;
}

// Save Image data as order item meta data
add_action( 'woocommerce_checkout_create_order_line_item', 'custom_field_update_order_item_meta', 20, 4 );
function custom_field_update_order_item_meta( $item, $cart_item_key, $values, $order ) {
    if ( isset( $values['file_upload'] ) ){
        $item->update_meta_data( '_img_file',  $values['file_upload'] );
    }
}

// Admin orders: Display a linked button + the link of the image file
add_action( 'woocommerce_after_order_itemmeta', 'backend_image_link_after_order_itemmeta', 10, 3 );
function backend_image_link_after_order_itemmeta( $item_id, $item, $product ) {
    // Only in backend for order line items (avoiding errors)
    if( is_admin() && $item->is_type('line_item') && $file_data = $item->get_meta( '_img_file' ) ){
        echo '<p><a href="'.$file_data['guid'].'" target="_blank" class="button">'.__("Open Image") . '</a></p>'; // Optional
        echo '<p><code>'.$file_data['guid'].'</code></p>'; // Optional
    }
}

// Admin new order email: Display a linked button + the link of the image file
add_action( 'woocommerce_email_after_order_table', 'wc_email_new_order_custom_meta_data', 10, 4);
function wc_email_new_order_custom_meta_data( $order, $sent_to_admin, $plain_text, $email ){
    // On "new order" email notifications
    if ( 'new_order' === $email->id ) {
        foreach ($order->get_items() as $item ) {
            if ( $file_data = $item->get_meta( '_img_file' ) ) {
                echo '<p>
                    <a href="'.$file_data['guid'].'" target="_blank" class="button">'.__("Download Image") . '</a><br>
                    <pre><code style="font-size:12px; background-color:#eee; padding:5px;">'.$file_data['guid'].'</code></pre>
                </p><br>';
            }
        }
    }
}
[site-socialshare]
  • Похожие записи
  • Комментарии
  • Вложения
Технология акций на Woocommerce

Технология акций на Woocommerce

В одном из постов я анализировал плагины для создания массовых скидок (акций). В процессе этого мною был выработан довольно универсальный алгоритм создания акций. Переделка плагина Woo Product Category Discount Woo Читать далее »

Пользовательский метод доставки

Пользовательский метод доставки

Создадим пользовательский метод доставки для Woocommerce 3.0. Метод создадим в виде плагина. Создадим для пользовательского метода уведомление при превышении веса (лимит установлен на 0): т.е. если у нас будет в Читать далее »

Выравнивание миниатюр товаров

Выравнивание миниатюр товаров

Идеальная ситуация, когда мы загружаем изображения для товаров (хотя бы для главного изображения) квадратными. т.е. заранее подготовленными, откадрированными. Но бывают случаи, когда на сайт начинают заливаться изображения разных пропорций. Сделаем Читать далее »

/

Добавить комментарий

Notice: Функция WP_Styles::add вызвана неправильно. Стиль с дескриптором "editor-buttons" был поставлен в очередь с незарегистрированными зависимостями: dashicons. Дополнительную информацию можно найти на странице «Отладка в WordPress». (Это сообщение было добавлено в версии 6.9.1.) in /home/t/tiberi6w/opttour.ru/public_html/wp-includes/functions.php on line 6170

Пока нет комментариев. Будь первым!

Приложить к товару файл
Вложение файла при отправке формы
Рекомендации для васВложение файла при отправке формыOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.