【问题标题】:Saving dynamic custom checkout fields in Woo commerce在 Woocommerce 中保存动态自定义结帐字段
【发布时间】:2023-03-05 09:01:01
【问题描述】:

我是 PHP 新手,遇到编码问题时,我通常会在网上搜索文章和教程。不幸的是,我在尝试自己的修复时一直在寻找几天,但没有运气,所以我希望有人能提供帮助。

我正在使用 Wordpress 和 Woo 商务建立一个网站。我已经按照这样的一些教程 (http://www.portmanteaudesigns.com/blog/2015/02/04/woocommerce-custom-checkout-fields-email-backend/) 将自定义字段添加到 woo 商务结帐。

我需要为购物车中的每件商品在结帐时添加一个字段,以便可以收集每个商品的信息(因此,如果购物车中的商品数量为 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]);
    }
}

}

请帮忙。

感谢期待

【问题讨论】:

  • 我遇到了完全相同的问题。
  • @Brock 我还没有找到解决方案,如果我找到了,我会在这里分享。

标签: php wordpress woocommerce


【解决方案1】:

问题发布已经有一段时间了,但我相信这可以帮助其他人,所以让我回答一下如何做到这一点。

这就是你正在做的:

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 另一个惊人的答案,详细描述了答案。

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 2023-03-27
    • 2021-04-03
    • 2018-07-21
    • 1970-01-01
    • 2017-03-21
    • 2013-07-07
    • 2015-12-16
    相关资源
    最近更新 更多