WooCommerce: добавьте поле ввода к каждому элементу в корзине

Вопрос:Я пытаюсь добавить одно текстовое поле ввода к каждому элементу в корзине и отправить этот пользовательский ввод в метаинформацию продукта. Это было 2 дня, и я еще не успел. Моя цель: Взять данные от пользователя за каждый элемент, добавленный в корзину. Отобразить этот ввод в метаданных заказа. Отобразить этот ввод в электронном письме с подтверждением,

Вопрос:

Я пытаюсь добавить одно текстовое поле ввода к каждому элементу в корзине и отправить этот пользовательский ввод в метаинформацию продукта. Это было 2 дня, и я еще не успел.

Моя цель:

  • Взять данные от пользователя за каждый элемент, добавленный в корзину.
  • Отобразить этот ввод в метаданных заказа.
  • Отобразить этот ввод в электронном письме с подтверждением, отправленном клиенту.

До сих пор я скопировал файл шаблона в свою тему и добавил поле ввода внутри ячейки. У меня возникли проблемы с крючками, узнал о крючках, которые мне понадобятся из плагина WooCommerce Product Wrap, как показано в этом woocommerce вопрос.

Код, который я добавил в шаблон cart.php, скопированный в моем каталоге тем:

$input_url_data = ‘<div class=»input-url»><input type=»text» name=»cart-url» value=»» title=»» class=»input-text cart-url text» /></div>’; echo apply_filters( ‘woocommerce_add_cart_item_data’, $input_url_data, $cart_item_key );

Код, добавленный в мою тему functions.php:

add_filter( ‘woocommerce_add_cart_item_data’,’add_cart_item_data’, 10, 2 ); add_filter( ‘woocommerce_get_cart_item_from_session’,’get_cart_item_from_session’, 10, 2 ); add_filter( ‘woocommerce_get_item_data’,’get_item_data’, 10, 2 ); add_filter( ‘woocommerce_add_cart_item’,’add_cart_item’, 10, 1 ); add_action( ‘woocommerce_add_order_item_meta’,’add_order_item_meta’, 10, 2 ); function add_cart_item_data( $cart_item_meta, $product_id ) { $input_url_key = «»; $input_url_data[‘inputurl’] = $input_url_key; return $input_url_data; } function get_cart_item_from_session( $cart_item, $values ) { if ( ! empty( $values[‘inputurl’] ) ) { $cart_item[‘inputurl’] = true; } return $cart_item; } function get_item_data( $item_data, $cart_item ) { if ( ! empty( $cart_item[‘inputurl’] ) ) $item_data[] = array( ); return $item_data; } function add_cart_item( $cart_item ) { if ( ! empty( $cart_item[‘inputurl’] ) ) { } return $cart_item; } function add_order_item_meta( $item_id, $cart_item ) { if ( ! empty( $cart_item[‘inputurl’] ) ) woocommerce_add_order_item_meta( $item_id, __( ‘URL by buyer’, ‘custom_input_url’ ), __( ‘Yes’, ‘custom_input_url’ ) ); }

Документация о hook woocommerce_add_cart_item_data не очень полезна, и я застрял в этом. Как я могу продолжить?

Ответ №1

Существует плагин wordpress, называемый WC Fields Factory для конкретной цели.

Вы также можете добиться этого, используя следующие крючки woocommerce woocommerce_before_add_to_cart_button, woocommerce_add_to_cart, woocommerce_cart_item_name и ‘woocommerce_add_order_item_meta’

как для добавления текстового поля к странице продукта

function add_name_on_tshirt_field() { echo ‘<table class=»variations» cellspacing=»0″> <tbody> <tr> <td class=»label»><label for=»color»>Name On T-Shirt</label></td> <td class=»value»> <input type=»text» name=»name-on-tshirt» value=»» /> </td> </tr> </tbody> </table>’; } add_action( ‘woocommerce_before_add_to_cart_button’, ‘add_name_on_tshirt_field’ );

Для отображения пользовательского поля в таблице элементов корзины используйте ниже

function render_meta_on_cart_item( $title = null, $cart_item = null, $cart_item_key = null ) { if( $cart_item_key && is_cart() ) { echo $title. ‘<dl class=»»> <dt class=»»>Name On T-Shirt : </dt> <dd class=»»><p>’. WC()->session->get( $cart_item_key.’_name_on_tshirt’) .'</p></dd> </dl>’; }else { echo $title; } } add_filter( ‘woocommerce_cart_item_name’, ‘render_meta_on_cart_item’, 1, 3 );

чтобы сделать ваши пользовательские метаданные в деталях заказа, сделайте что-нибудь вроде этого

function tshirt_order_meta_handler( $item_id, $values, $cart_item_key ) { wc_add_order_item_meta( $item_id, «name_on_tshirt», WC()->session->get( $cart_item_key.’_name_on_tshirt’) ); } add_action( ‘woocommerce_add_order_item_meta’, ‘tshirt_order_meta_handler’, 1, 3 );

для детальной реализации, у меня есть статья о том, как это сделать без использования каких-либо плагинов.

Ответ №2

Это легко. Попробуйте найти и прочитать код Woocommerce.

Эта часть кода заставила меня указать, где я могу добавить Url @Cart. И я вижу это в обзоре заказов как клиент и как администратор.

Я не могу проверить электронную почту, потому что я ленив. Извините.

Что-то вроде этого идет в шаблонах cartcart.php(там нужен еще один код, поскольку он разделяет столбцы)

<td class=»product-url»> <?php $html = sprintf( ‘<div class=»url»><input type=»text» name=»cart[%s][url]» value=»%s» size=»4″ title=»Url» class=»input-text url text» /></div>’, $cart_item_key, esc_attr( $values[‘url’] ) ); echo $html; ?> </td>

functions.php

// get from session your URL variable and add it to item add_filter(‘woocommerce_get_cart_item_from_session’, ‘cart_item_from_session’, 99, 3); function cart_item_from_session( $data, $values, $key ) { $data[‘url’] = isset( $values[‘url’] ) ? $values[‘url’] : »; return $data; } // this one does the same as woocommerce_update_cart_action() in pluginswoocommercewoocommerce-functions.php // but with your URL variable // this might not be the best way but it works add_action( ‘init’, ‘update_cart_action’, 9); function update_cart_action() { global $woocommerce; if ( ( ! empty( $_POST[‘update_cart’] ) || ! empty( $_POST[‘proceed’] ) ) && $woocommerce->verify_nonce(‘cart’)) { $cart_totals = isset( $_POST[‘cart’] ) ? $_POST[‘cart’] : »; if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) { foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) { if ( isset( $cart_totals[ $cart_item_key ][‘url’] ) ) { $woocommerce->cart->cart_contents[ $cart_item_key ][‘url’] = $cart_totals[ $cart_item_key ][‘url’]; } } } } } // this is in Order summary. It show Url variable under product name. Same place where Variations are shown. add_filter( ‘woocommerce_get_item_data’, ‘item_data’, 10, 2 ); function item_data( $data, $cart_item ) { if ( isset( $cart_item[‘url’] ) ) { $data[‘url’] = array(‘name’ => ‘Url’, ‘value’ => $cart_item[‘url’]); } return $data; } // this adds Url as meta in Order for item add_action (‘woocommerce_add_order_item_meta’, ‘add_item_meta’, 10, 2); function add_item_meta( $item_id, $values ) { woocommerce_add_order_item_meta( $item_id, ‘Url’, $values[‘url’] ); }

400 $- хорошая цена.

Ответ №3

Вы можете сделать это довольно легко с Плагин надстройки над дополнением Woocommerce

С веб-сайта WooThemes:

Позвольте своим клиентам настраивать ваши продукты, добавив новые параметры таких как окна ввода, выпадающие меню или флажки. С дополнениями к продукту продление, подарочные сообщения, пожертвования, лазерная гравировка и любые другие продукт, который может потребовать ввода пользователем каким-либо образом, теперь является опцией для ваши клиенты!

Надстройки продукта поддерживают обязательные поля, текстовые поля, флажки, радиостанций, блоков выбора, пользовательских ценовых входов и ящиков для загрузки файлов.

Я использовал его раньше, чтобы добавить дополнительное поле для пожертвования на покупку продукта и отобразить его на странице с благодарностью/электронной почтой.

Это около 50 долларов США, и вы сможете быстро и быстро запускать ввод текста и отображать поле на странице благодарности или электронной почте, как вы хотите. $50 определенно стоит того времени, которое вы бы спасли, чтобы самостоятельно разработать эту функцию.

Здесь поток с точки зрения конечных пользователей:

Конечный пользователь вводит данные поля и добавляет продукт в корзину

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

После покупки, конечный пользователь приземляется на странице благодарности и получает письмо о получении с данными поля, включенными в товарный элемент.

На сервере:

Создайте настраиваемое поле для каждого продукта. Этот параметр находится на вкладке меню надстройки.

  • Создайте новую группу Addon
  • Введите название группы (для упрощения организации)
  • Добавить новую опцию и ввести метку (это то, что конечный пользователь видит и привязан к продукту)
  • Обновить/опубликовать продукт.

Для выполненных заказов это то, что вы увидите в описании заказа admin:

Надеемся, что это поможет и сэкономит вам массу времени в разработке!

Оцените статью
Добавить комментарий