WooCommerce: добавьте поле ввода к каждому элементу в корзине
Я пытаюсь добавить одно текстовое поле ввода к каждому элементу в корзине и представить этот пользовательский ввод в метаинформацию продукта. Прошло уже 2 дня, и я еще не успел.
Моя цель:
- Вводите данные от пользователя за каждый элемент, добавленный в корзину.
- Отобразите этот ввод в метаинформации заказа.
- Отобразите этот ввод в электронном письме с подтверждением, отправленном клиенту.
До сих пор я скопировал файл шаблона в свою тему и добавил поле ввода внутри ячейки. У меня проблемы с крючками, узнал о крючках, которые мне понадобятся от WooCommerce Product Gift Wrap plugin, как указано в этой проблеме в woocommerce .
- Количество столбцов не соответствует значению в строке 1
- Служба Mysql не запускается, ошибка функции инициализации InnoDB
- WP - Использовать файл в каталоге плагинов в качестве настраиваемого шаблона страницы?
- Удаление тегов и в сообщениях WordPress
- wp_nav_menu изменить имя classа подменю?
Код, который я добавил в шаблон 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 не очень полезна, и я застрял в этом. Как я могу продолжить?
- Удалить категорию и базу тегов из URL-адреса WordPress - без плагина
- TypeError: «undefined» не является функцией (оценка «$ (document)»)
- .htaccess & Wordpress: Исключить папку из RewriteRule
- Добавить столбцы в список заказов администраторов в WooCommerce
- Доступ запрещен для пользователя root @ localhost '(с использованием пароля: НЕТ)
- Запрос на перекрестный запрос заблокирован
- wordpress - настраивать значения настраиваемого поля для последующего их восстановления
- Заказ MySQL перед Группой
Для точной установки есть плагин 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 с точки зрения конечных пользователей:
Конечный пользователь вводит данные поля и добавляет продукт в корзину
Когда пользователь просматривает корзину, данные, которые они ввели в пользовательское поле, отображаются вместе с продуктом
После покупки конечный пользователь приземляется на странице благодарности и получает письмо о получении с полевыми данными, включенными в товарный элемент.
На бэкэнде:
Создайте настраиваемое поле для каждого продукта. Этот параметр находится на вкладке меню надстройки.
- Создайте новую группу Addon
- Введите название группы (для упрощения организации)
- Добавьте новую опцию и введите метку (это то, что конечный пользователь видит и привязан к продукту)
- Обновление / публикация продукта.
Для выполненных заказов это то, что вы увидите в описании заказа admin:
Надеюсь, это поможет и сэкономит вам массу времени в разработке!