Php 将自定义字段数据保存到Woocommerce产品变体的购物车和订单
我们设法为以下变化的产品设置了一个自定义字段 此时,当用户选择变体时,我们能够在单个产品页面中显示自定义文本字段,但这在购买过程中是不够的,因为我们需要: A) 在购物车中显示此文本并结帐Php 将自定义字段数据保存到Woocommerce产品变体的购物车和订单,php,wordpress,woocommerce,custom-fields,product-variations,Php,Wordpress,Woocommerce,Custom Fields,Product Variations,我们设法为以下变化的产品设置了一个自定义字段 此时,当用户选择变体时,我们能够在单个产品页面中显示自定义文本字段,但这在购买过程中是不够的,因为我们需要: A) 在购物车中显示此文本并结帐 B) 保存此信息,以便在感谢页面、电子邮件和管理订单编辑页面中显示 类似于,但有产品变化,而不是简单的产品 这是我们添加到functions.php的代码,用于将自定义字段添加到产品变体中 // Add Variation Settings add_action( 'woocommerce_product_a
B) 保存此信息,以便在感谢页面、电子邮件和管理订单编辑页面中显示 类似于,但有产品变化,而不是简单的产品 这是我们添加到functions.php的代码,用于将自定义字段添加到产品变体中
// Add Variation Settings
add_action( 'woocommerce_product_after_variable_attributes', 'variation_settings_fields', 10, 3 );
// Save Variation Settings
add_action( 'woocommerce_save_product_variation', 'save_variation_settings_fields', 10, 2 );
/**
* Create new fields for variations
*
*/
function variation_settings_fields( $loop, $variation_data, $variation ) {
// Text Field
woocommerce_wp_text_input(
array(
'id' => '_text_field[' . $variation->ID . ']',
'label' => __( 'My Text Field', 'woocommerce' ),
'placeholder' => 'http://',
'desc_tip' => 'true',
'description' => __( 'Enter the custom value here.', 'woocommerce' ),
'value' => get_post_meta( $variation->ID, '_text_field', true )
)
);
// Hidden field
woocommerce_wp_hidden_input(
array(
'id' => '_hidden_field[' . $variation->ID . ']',
'value' => 'hidden_value'
)
);
}
/**
* Save new fields for variations
*
*/
function save_variation_settings_fields( $post_id ) {
// Text Field
$text_field = $_POST['_text_field'][ $post_id ];
if( ! empty( $text_field ) ) {
update_post_meta( $post_id, '_text_field', esc_attr( $text_field ) );
}
// Hidden field
$hidden = $_POST['_hidden_field'][ $post_id ];
if( ! empty( $hidden ) ) {
update_post_meta( $post_id, '_hidden_field', esc_attr( $hidden ) );
}
}
// Add New Variation Settings
add_filter( 'woocommerce_available_variation', 'load_variation_settings_fields' );
/**
* Add custom fields for variations
*
*/
function load_variation_settings_fields( $variations ) {
// duplicate the line for each field
$variations['text_field'] = get_post_meta( $variations[ 'variation_id' ], '_text_field', true );
return $variations;
}
因此,这里的目标是如何为购物车中的每个变体显示此自定义字段,并在项目下方签出(如下图所示-查看发货延迟通知)
并将每个变体的自定义字段信息保存到感谢页面、电子邮件和订单页面(我们使用此代码为简单产品进行了此操作,但这不适用于可变产品)
请帮忙 更新 您的代码中有一些错误…以下重新访问的代码将解决您的问题:
// Display Variation custom fields (admin)
add_action( 'woocommerce_product_after_variable_attributes', 'display_variation_setting_custom_fields', 10, 3 );
function display_variation_setting_custom_fields( $loop, $variation_data, $variation ) {
echo '<div>';
woocommerce_wp_text_input( array( // Text Field
'id' => "_text_field[$loop]",
'label' => __("My Text Field", "woocommerce"),
'placeholder' => "http://",
'desc_tip' => true,
'description' => __("Enter the custom value here.", "woocommerce"),
'wrapper_class' => 'form-row form-row-full',
'value' => get_post_meta( $variation->ID, '_text_field', true ),
) );
woocommerce_wp_hidden_input( array( // Hidden field
'id' => "_hidden_field[$loop]",
'value' => 'hidden_value',
) );
echo '</div>';
}
// Save Variation custom fields
add_action( 'woocommerce_save_product_variation', 'save_variation_custom_fields', 10, 2 );
function save_variation_custom_fields( $variation_id, $i ) {
// Save Text Field
if( isset( $_POST['_text_field'][$i] ) && ! empty( $_POST['_text_field'][$i] ) )
update_post_meta( $variation_id, '_text_field', sanitize_text_field( $_POST['_text_field'][$i] ) );
// Save Hidden Field
if( isset( $_POST['_hidden_field'][$i] ) && ! empty( $_POST['_hidden_field'][$i] ) )
update_post_meta( $variation_id, '_hidden_field', esc_attr( $_POST['_hidden_field'][$i] ) );
}
// Include our variation custom field
add_filter( 'woocommerce_available_variation', 'include_variation_custom_field', 10, 3) ;
function include_variation_custom_field( $data, $product, $variation ) {
$data['text_field'] = $variation->get_meta( '_text_field' );
return $data;
}
// Save and display "Custom Field for Simple Products" on order items everywhere
add_filter( 'woocommerce_checkout_create_order_line_item', 'action_wc_checkout_create_order_line_item_2', 10, 4 );
function action_wc_checkout_create_order_line_item_2( $item, $cart_item_key, $values, $order ) {
// Get the Custom Field
$value = $values['data']->get_meta( '_text_field' );
if( ! empty( $value ) ) {
// Save it and display it
$item->update_meta_data( __( 'Custom Field', 'woocommerce' ), $value );
}
}
//显示变量自定义字段(管理员)
添加操作('WOOMerce\u product\u after\u variable\u attributes','display\u variation\u setting\u custom\u fields',10,3);
函数显示\变量\设置\自定义\字段($loop、$variation\u data、$variation){
回声';
woocommerce\u wp\u text\u输入(数组(//文本字段
'id'=>“\u text\u字段[$loop]”,
'label'=>\(“我的文本字段”,“woocommerce”),
'占位符'=>“http://”,
“描述提示”=>正确,
“description'=>”(在此处输入自定义值),“woocommerce”),
'wrapper_class'=>'form row form row full',
'value'=>get_post_meta($variation->ID,'u text_field',true),
) );
woocommerce\u wp\u hidden\u输入(数组(//隐藏字段
'id'=>“_hidden_字段[$loop]”,
'value'=>'hidden_value',
) );
回声';
}
//保存变体自定义字段
添加操作('woocommerce\u save\u product\u variation'、'save\u variation\u custom\u fields',10,2);
函数save_variation_custom_字段($variation_id,$i){
//保存文本字段
if(设置($\u POST[“u text\u field”][$i])&!空($\u POST[“u text\u field”][$i]))
更新发布元数据($变体id,''''''''''''''''''''''''''''''''''''.'文本字段''.'清理'''.'文本字段'.[$i]);
//保存隐藏字段
if(设置($\u POST[“u hidden\u field”][$i])&!空($\u POST[“u hidden\u field”][$i]))
更新发布元($variation\u id,'u hidden\u field',esc\u attr($\u post[''u hidden\u field'][$i]);
}
//包括我们的变体自定义字段
添加过滤器(“woocommerce\u available\u variation”,“include\u variation\u custom\u field”,10,3);
函数包括变量自定义字段($data、$product、$VARIANCE){
$data['text_field']=$variation->get_meta('u text_field');
返回$data;
}
//在任何地方保存和显示订单项上的“简单产品自定义字段”
添加过滤器('woocommerce\u checkout\u create\u order\u line\u item'、'action\u wc\u checkout\u create\u order\u line\u item\u 2',10,4);
函数操作\u wc\u签出\u创建\u订单\u行\u项目\u 2($item,$cart\u item\u key,$values,$order){
//获取自定义字段
$value=$values['data']->get_meta('u text_field');
如果(!空($value)){
//保存并显示它
$item->update_meta_数据(uuu('customfield','woocommerce'),$value);
}
}
代码进入活动子主题(或活动主题)的functions.php文件。测试和工作
相关的:
索姆截图 管理产品变体设置: 在订单接收页面(谢谢): 在管理员编辑订单页面:
感谢您抽出时间来LoicTheAztec,尽管这对我来说不起作用。让我再解释一下:我可以在单个产品页面中显示自定义字段,但当产品添加到购物车中时,它不会在商品下方显示自定义字段,也不会在结帐时显示,也不会将信息保存到订单或电子邮件中。代码的最后一部分//保存并显示“简单产品的自定义字段”在order items everywhere//中,我发现了一个致命错误:(@phriquez刚刚在另一个安装(最新版本)上测试了这个错误)我已经添加了一些截图。所以你可能需要用我的问题代码替换你的所有问题代码。现在你没有在问题中要求在购物车和结帐项目中显示tha。好的。我就是这个问题中的同一个用户。当我将你发送给我的代码添加到我的函数中时,你认为有错误或冲突吗。php having这是之前添加的?@phriquez是的,当然,这就是问题所在…我在这里稍微更改了最后一个函数名(代码更新)…这次应该可以工作了。解决了。我发现问题是我实现的错误。它可以工作了。谢谢!
// Display Variation custom fields (admin)
add_action( 'woocommerce_product_after_variable_attributes', 'display_variation_setting_custom_fields', 10, 3 );
function display_variation_setting_custom_fields( $loop, $variation_data, $variation ) {
echo '<div>';
woocommerce_wp_text_input( array( // Text Field
'id' => "_text_field[$loop]",
'label' => __("My Text Field", "woocommerce"),
'placeholder' => "http://",
'desc_tip' => true,
'description' => __("Enter the custom value here.", "woocommerce"),
'wrapper_class' => 'form-row form-row-full',
'value' => get_post_meta( $variation->ID, '_text_field', true ),
) );
woocommerce_wp_hidden_input( array( // Hidden field
'id' => "_hidden_field[$loop]",
'value' => 'hidden_value',
) );
echo '</div>';
}
// Save Variation custom fields
add_action( 'woocommerce_save_product_variation', 'save_variation_custom_fields', 10, 2 );
function save_variation_custom_fields( $variation_id, $i ) {
// Save Text Field
if( isset( $_POST['_text_field'][$i] ) && ! empty( $_POST['_text_field'][$i] ) )
update_post_meta( $variation_id, '_text_field', sanitize_text_field( $_POST['_text_field'][$i] ) );
// Save Hidden Field
if( isset( $_POST['_hidden_field'][$i] ) && ! empty( $_POST['_hidden_field'][$i] ) )
update_post_meta( $variation_id, '_hidden_field', esc_attr( $_POST['_hidden_field'][$i] ) );
}
// Include our variation custom field
add_filter( 'woocommerce_available_variation', 'include_variation_custom_field', 10, 3) ;
function include_variation_custom_field( $data, $product, $variation ) {
$data['text_field'] = $variation->get_meta( '_text_field' );
return $data;
}
// Save and display "Custom Field for Simple Products" on order items everywhere
add_filter( 'woocommerce_checkout_create_order_line_item', 'action_wc_checkout_create_order_line_item_2', 10, 4 );
function action_wc_checkout_create_order_line_item_2( $item, $cart_item_key, $values, $order ) {
// Get the Custom Field
$value = $values['data']->get_meta( '_text_field' );
if( ! empty( $value ) ) {
// Save it and display it
$item->update_meta_data( __( 'Custom Field', 'woocommerce' ), $value );
}
}