woocommerce在产品购买页面定制输入框,并记录到订单
-->
如果你销售的产品像印花t恤、蛋糕等。通过在线,你需要一些额外的信息从客户,把他们的订单。
像名字印在t恤(或)消息写在蛋糕。
在woocommerce通过订单元这是可以做到的。在本文中,您将找到如何实现这个不使用任何插件。
我开发了一个wordpress插件为此,结帐WC领域的工厂wordpress插件,创建woocommerce定义产品领域。!
假设你是销售印花t恤,我们将添加名字的t恤在你的产品页面文本框。
下面的代码在你的地方 functions.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /** ? * The following hook will add a input field right before “add to cart button” ? * will be used for getting Name on t-shirt ? */ 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’ ); |
上面的代码会插入一个文本框woocommerce产品页面,以便客户可以输入他们的名字印在有序的t恤。
下面的代码在你的地方 functions.php
1 2 3 4 5 6 7 8 | function tshirt_name_validation() { ???? if ( empty ( $_REQUEST [ ‘name-on-tshirt’ ] ) ) { ???????? wc_add_notice( __( ‘Please enter a Name for Printing…’ , ‘woocommerce’ ), ‘error’ ); ???????? return false; ???? } ???? return true; } add_action( ‘woocommerce_add_to_cart_validation’ , ‘tshirt_name_validation’ , 10, 3 ); |
上面的代码将会做验证 name-on-tshirt 字段。
下面的代码在你的地方 functions.php
1 2 3 4 5 6 7 8 9 | function save_name_on_tshirt_field( $cart_item_data , $product_id ) { ???? if ( isset( $_REQUEST [ ‘name-on-tshirt’ ] ) ) { ???????? $cart_item_data [ ‘name_on_tshirt’ ] = $_REQUEST [ ‘name-on-tshirt’ ]; ???????? /* below statement make sure every add to cart action as unique line item */ ???????? $cart_item_data [ ‘unique_key’ ] = md5( microtime().rand() ); ???? } ???? return $cart_item_data ; } add_action( ‘woocommerce_add_cart_item_data’ , ‘save_name_on_tshirt_field’ , 10, 2 ); |
上面的代码将存储自定义字段(被添加到购物车)的产品到购物车条目数据(每个车项都有自己的数据)
下面的代码在你的地方 functions.php
1 2 3 4 5 6 7 8 9 10 11 12 | function render_meta_on_cart_and_checkout( $cart_data , $cart_item = null ) { ???? $custom_items = array (); ???? /* Woo 2.4.2 updates */ ???? if ( ! empty ( $cart_data ) ) { ???????? $custom_items = $cart_data ; ???? } ???? if ( isset( $cart_item [ ‘name_on_tshirt’ ] ) ) { ???????? $custom_items [] = array ( “name” => ‘Name On T-Shirt’ , “value” => $cart_item [ ‘name_on_tshirt’ ] ); ???? } ???? return $custom_items ; } add_filter( ‘woocommerce_get_item_data’ , ‘render_meta_on_cart_and_checkout’ , 10, 2 ); |
上面的代码将呈现自定义数据放入您的购物车和结帐页面。
下面的代码在你的地方 functions.php
1 2 3 4 5 6 | function tshirt_order_meta_handler( $item_id , $values , $cart_item_key ) { ???? if ( isset( $values [ ‘name_on_tshirt’ ] ) ) { ???????? wc_add_order_item_meta( $item_id , “name_on_tshirt” , $values [ ‘name_on_tshirt’ ] ); ???? } } add_action( ‘woocommerce_add_order_item_meta’ , ‘tshirt_order_meta_handler’ , 1, 3 ); |
这段代码将添加您的自定义字段元。
定制字段为特定产品类别(或为特定的产品)
如果你想为一个特定的产品类别,添加自定义字段改变你 add_name_on_tshirt_field() 作为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function add_name_on_tshirt_field() { ? if ( has_term( array ( ‘term1’ , ‘term2’ , ‘term3’ ), ‘product_cat’ ) ) { ???? 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>’; ??? } } |
为特定的产品,如果你想要改变的 if 条件是
1 2 3 | if ( get_the_title() == “Your Product Title” ) { ???? echo ‘Your custom fields’ ; } |
注意:您也应该更新你的 tshirt_name_validation() 验证只单独的类别或产品。如。
1 2 3 4 5 6 7 8 9 | function tshirt_name_validation( $flaq , $product_id , $quantity , $variation_id , $variations ) {? ???? if ( get_the_title( $product_id ) == “Your Product Title” ) { ???????? if ( empty ( $_REQUEST [ ‘name-on-tshirt’ ] ) ) { ???????? wc_add_notice( __( ‘Please enter a Name for Printing…’ , ‘woocommerce’ ), ‘error’ ); ???????? return false; ???? } ???? }?? ???? return true; } |
woocommerce在产品购买页面定制输入框,并记录到订单