我是PHP的新手,当我遇到编码问题时,我通常会在网上搜索文章和教程。不幸的是,在没有运气的情况下尝试自己的修复程序时,我一直在寻找几天,所以我希望有人可以提供帮助。
我正在使用Wordpress和Woo商务建立一个网站。我已经按照这样的一些教程(http://www.portmanteaudesigns.com/blog/2015/02/04/woocommerce-custom-checkout-fields-email-backend/)将自定义字段添加到woo commerce checkout。
我需要在结帐时为购物车中的每件商品添加一个字段,以便每个商品可以收集信息(因此,如果购物车中的商品数量为6,则会有6个字段用于提供信息) 。
使用以下代码,对于购物车中的每件商品,都会添加一个字段:
/**
* Add the field to the checkout
**/
add_action( 'woocommerce_after_order_notes', 'wordimpress_custom_checkout_field' );
function wordimpress_custom_checkout_field( $checkout ) {
//Check if Shoe in Cart (UPDATE WITH YOUR PRODUCT ID)
$shoe_in_cart = wordimpress_is_conditional_product_in_cart();
//Shoe is in cart so show additional fields
if ( $shoe_in_cart === true ) {
echo '<div id="my_custom_checkout_field">';
foreach ($_SESSION['value'] as $key => $value) {
$n = 1;
$itemQuantity = $value['quantity'];
$ProductID = $value['product_id'];
$_product = $value['data']->post;
for($QuantityCheck = 0; $QuantityCheck < $itemQuantity; $QuantityCheck++) {
$LabelTitle = ($_product->post_title. ' '.$n.' - shoe name');
woocommerce_form_field( 'inscription_textbox'.$ProductID.$n, array(
'type' => 'text',
'required' => true,
'placeholder' => __('Shoe name'),
'class' => array( 'inscription-text form-row-wide' ),
'label' => __( $LabelTitle ),
), $checkout->get_value( 'inscription_textbox'.$ProductID.$n ) );
$checkoutFieldName = ('inscription_textbox'.$ProductID.$n);
$_SESSION['checkoutFields'] [] = $checkoutFieldName;
$n ++;
}
}
echo '</div>';
}
}
我尝试附上结果图片,但我的声誉不够高(代码正常,并添加了动态附加字段)。
我的问题在于将这些动态自定义字段保存到数据库中,或者将它们显示在订单确认页面上。
这是我用来尝试将字段信息保存到数据库的最新代码:
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );
function my_custom_checkout_field_update_order_meta( $order_id ) {
foreach($_SESSION['checkoutFields'] as $key => $value){
if( isset($_POST[$value]) ) {
add_post_meta($order_id, $value, $_POST[$value]);
}
}
}
请帮忙。
感谢您的期待
答案 0 :(得分:0)
问题发布已经有一段时间了,但我确信这可以帮助其他人,所以让我回答一下如何做。
这就是你正在做的事情:
function my_custom_checkout_field_update_order_meta( $order_id ) {
foreach($_SESSION['checkoutFields'] as $key => $value){
if( isset($_POST[$value]) ) {
add_post_meta($order_id, $value, $_POST[$value]);
}}}
但是猜猜怎么着?你不必那样做。您甚至不需要使用foreach
WordPress有一个名为maybe_serialize
的核心函数,它会自动检查该值是否为数组。
所以你会这样做:
function my_custom_checkout_field_update_order_meta( $order_id ) {
if( isset($_POST[$value]) ) {
add_post_meta($order_id, $value, $_POST[$value]);
}}
Here is另一个惊人的答案,详细描述了答案。