wordpress - todos - WooCommerce: agregue campo de entrada a cada artículo en el carrito
shortcode categories woocommerce (3)
He intentado agregar un solo campo de entrada de texto a cada artículo en el carrito y enviar esa entrada de usuario a la metainformación del producto. Han pasado 2 días y aún no lo he logrado.
Mi objetivo es:
- Tome la información del usuario para cada artículo agregado al carrito.
- Muestre esa entrada en la metainformación de la orden.
- Muestre esa entrada en el correo electrónico de confirmación enviado al cliente.
Hasta ahora, he copiado el archivo de la plantilla a mi tema y he añadido un campo de entrada dentro de una celda. Estoy teniendo problemas con los ganchos, aprendí sobre los ganchos que necesitaré del complemento de envoltura de productos de WooCommerce como se indica en este problema woocommerce .
Código que agregué a la plantilla cart.php copiada en mi directorio de temas:
$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 );
El código que agregué a las funciones de mi tema.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'' ) );
}
La documentación sobre el enlace woocommerce_add_cart_item_data no es muy útil y estoy atascado en esto. ¿Cómo procedo?
Puede hacerlo con bastante facilidad con el complemento de complementos de productos de Woocommerce
Desde el sitio web de WooThemes:
Permita que sus clientes personalicen sus productos agregando nuevas opciones como cuadros de entrada, listas desplegables o casillas de verificación. Con la extensión Complementos de productos, los mensajes de regalo, las donaciones, el grabado láser y cualquier otro producto que requiera la participación del usuario de alguna forma ahora es una opción para sus clientes.
Los complementos de productos admiten campos obligatorios, áreas de texto, casillas de verificación, radios, cuadros de selección, entradas de precios personalizados y cuadros de carga de archivos.
Lo he usado antes para agregar un campo de donación adicional a la compra de un producto y mostrarlo en la página de agradecimiento / correo electrónico de recibo.
Son aproximadamente $ 50 dólares estadounidenses y lo pondrán en funcionamiento en poco tiempo para agregar el texto ingresado y mostrar el campo en la página de agradecimiento / correo electrónico como lo desee. $ 50 definitivamente vale la cantidad de tiempo que ahorraría el secado para desarrollar esta característica usted mismo.
Aquí está el flujo desde la perspectiva de los usuarios finales:
El usuario final ingresa los datos del campo y agrega el producto al carro
Cuando el usuario ve el carrito, los datos que ingresaron en el campo personalizado se muestran junto con el producto
Después de la compra, el usuario final aterriza en la página de agradecimiento y recibe el correo electrónico del recibo con los datos de campo incluidos con el artículo del producto.
En el back-end:
Crear un campo personalizado para cada producto. La opción se encuentra en la pestaña del menú Complementos.
- Crear un nuevo grupo de complementos
- Ingrese un nombre de grupo (para una organización más fácil)
- Agregue una nueva opción e ingrese la etiqueta (esto es lo que ve el usuario final y está vinculado al producto)
- Actualizar / Publicar producto.
Para los pedidos completados, esto es lo que verá en el administrador de detalles del pedido:
Espero que esto ayude y ahorre un montón de tiempo en desarrollo.
Es fácil. Intenta buscar y leer el código de Woocommerce.
Este código me llevó a señalar dónde puedo agregar Url @ Cart. Y puedo verlo en la revisión de la orden como cliente y como administrador.
No puedo probar el correo electrónico porque soy flojo. Lo siento.
Algo así va en templates / cart / cart.php (hay necesidad de más código ya que es una columna separada)
<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 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 $ es un buen precio.
Hay un complemento de WordPress llamado WC Fields Factory para el propósito exacto.
También puede lograr esto utilizando los siguientes enlaces de woocommerce_before_add_to_cart_button
, woocommerce_add_to_cart
, woocommerce_cart_item_name
y ''woocommerce_add_order_item_meta''
Me gusta para agregar campo de texto a la página del producto
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'' );
Para mostrar el campo personalizado en la tabla de elementos del carrito, utilice la tabla siguiente
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 );
para hacer sus metadatos personalizados en los detalles de su pedido, haga algo como esto
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 );
para una implementación detallada, tengo un artículo sobre cómo hacer esto sin usar ningún complemento. http://sarkware.com/how-to-pass-custom-data-to-cart-line-item-in-woocommerce-without-using-plugins/