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

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

Моя цель:

  1. Вводите данные от пользователя за каждый элемент, добавленный в корзину.
  2. Отобразите этот ввод в метаинформации заказа.
  3. Отобразите этот ввод в электронном письме с подтверждением, отправленном клиенту.

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

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

$input_url_data = '
'; echo apply_filters( 'woocommerce_add_cart_item_data', $input_url_data, $cart_item_key );

Код, добавленный в функции моей функции.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 не очень полезна, и я застрял в этом. Как я могу продолжить?

Для точной установки есть плагин wordpress, называемый WC Fields Factory .

Вы также можете добиться этого, используя следующие крючки 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 '
'; } 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. '
Name On T-Shirt :

'. WC()->session->get( $cart_item_key.'_name_on_tshirt') .'

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

для детальной реализации, у меня есть статья о том, как это сделать без использования каких-либо плагинов. http://sarkware.com/how-to-pass-custom-data-to-cart-line-item-in-woocommerce-without-using-plugins/

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

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

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

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

  
', $cart_item_key, esc_attr( $values['url'] ) ); echo $html; ?>

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 plugins\woocommerce\woocommerce-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 $ – хорошая цена.

Вы можете сделать это довольно легко с помощью плагина дополнений к Woocommerce Product Add-ons

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

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

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

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

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

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

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

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

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

На бэкэнде:

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

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

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

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

Страница сведений о странице продукта также отображает поле

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

  • jQuery Ajax возвращает ошибку 404, но правильный ответ
  • Как получить имя текущей страницы в WordPress?
  • Получить корневой каталог WordPress?
  • Запрос на перекрестный запрос заблокирован
  • # 1273 - Неизвестная сортировка: 'utf8mb4_unicode_ci' Cpanel
  • Заказ MySQL перед Группой
  • wp_nav_menu изменить имя classа подменю?
  • Удалить категорию и базу тегов из URL-адреса WordPress - без плагина
  • Служба Mysql не запускается, ошибка функции инициализации InnoDB
  • Добавление полей настраиваемого изображения и других полей одновременно
  • Управление сеансом Wordpress
  • Interesting Posts

    переменная условия – почему вызов pthread_cond_signal () перед вызовом pthread_cond_wait () является логической ошибкой?

    Делает nouveau поддержкой hdmi для видеокарт семейства NV50?

    Создание и совместное использование файла из внутреннего хранилища

    Существует ли R-функция для нахождения индекса элемента в векторе?

    Count Строки в Doctrine QueryBuilder

    Поделиться изображением и текстом через Whatsapp или Facebook

    Как найти количество дней между двумя датами / DateTimePickers

    YouTube Iframe встроить автоматическую игру

    Не удается получить доступ к общей папке

    Как привязать события «touchstart» и «click», но не отвечать на оба?

    Переопределить режим совместимости интрасети IE8

    Правило GNU Makefile, генерирующее несколько целей из одного исходного файла

    Загрузите все изображения из каталога

    Как преобразовать числа между шестнадцатеричным и десятичным в C #?

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

    Давайте будем гением компьютера.