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

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

HIT

14.04.2021

1243

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

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>';
            }
        }
    }
}

Поделиться в соц. сетях:

  • Похожие записи
  • Комментарии
  • Вложения
Бонусная система

Бонусная система

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

Массовое изменение метаполей

Массовое изменение метаполей

Известная проблема/неудобство wordpress — обновление метаполей, т.е. чтобы обновить метаполе необходимо войти в запись и обновить ее. Массовое редактирование (например поменять статус записей или т.п.) в данном случае не помогает Читать далее »

Заявка на товар

Заявка на товар

Бывает так, что нам не нужно непосредственно продавать товар через сайт, а только лишь получить на него заявку. Данный механизм прост: нам нужно создать форму обратной связи в которую будет Читать далее »

/

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

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

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