wordpress 显示结帐ACF高级自定义字段并将值保存在WooCommerce中

qc6wkl3g  于 2023-06-21  发布在  WordPress
关注(0)|答案(2)|浏览(204)

我正在尝试向结帐页面添加其他字段。我已经设置了我的ACF字段,并且可以在结帐页面上显示它们(通过acf_form),但是当我下订单时,我在字段中输入的值不会传递到创建的订单。
这是我用来显示和更新字段的代码:

add_action( 'woocommerce_after_order_notes', 'my_acf_checkout_display' ); 

function my_acf_checkout_display() { 
    acf_form(array('form' => false,'fields' => array('inseam'))); 
}

add_action( 'woocommerce_checkout_update_order_meta','acf_update_field_at_checkout' );
  
function acf_update_field_at_checkout( $order_id ) {
        
        // acf custom field id
        $my_field = 'inseam';
    
        $acf_form_value = $_POST['acf'][$my_field];
        update_field($my_field,$acf_form_value,$order_id);

}

在这里,您可以看到我如何设置字段:

这是我的结帐页面的样子:

下面是订单中的"updated"字段(保持为空):

当我硬编码的值,说12,那么它的工作!

add_action( 'woocommerce_after_order_notes', 'my_acf_checkout_display' ); 

function my_acf_checkout_display() { 
    acf_form(array('form' => false,'fields' => array('inseam'))); 
}

add_action( 'woocommerce_checkout_update_order_meta','acf_update_field_at_checkout' );
  
function acf_update_field_at_checkout( $order_id ) {
        
        // acf custom field id
        $my_field = 'inseam';
        $acf_form_value = 12;
        //$acf_form_value = $_POST['acf'][$my_field];
        update_field($my_field,$acf_form_value,$order_id);

}

有谁知道为什么它不填充输入的值为inseam的秩序?
非常感谢你提前!

p1iqtdky

p1iqtdky1#

您没有使用正确的字段ID来与ACF一起使用。
因此,首先在管理员ACF字段组中单击“屏幕选项”:

然后选择显示字段“slug”和“Field Key”选项。

现在你可以得到正确的“字段键”在你的代码中使用...
下面是我测试过的代码,重现了你的设置 (在代码中替换正确的字段Key为你的“Inseam”字段)

// Displaying ACF field in Checkout after order notes
add_action( 'woocommerce_after_order_notes', 'checkout_display_acf_field' ); 
function checkout_display_acf_field() { 
    $acf_field_key = 'field_648715e6451d1'; // Here set the field Key

    acf_form( array(
        'form' => false, 
        'fields' => array( $acf_field_key )
    ) ); 
}

add_action( 'woocommerce_checkout_update_order_meta', 'acf_update_checkout_field' );
function acf_update_checkout_field( $order_id ) {
    $acf_field_key = 'field_648715e6451d1'; // Here set the field Key
    
    if ( isset($_POST['acf'][$acf_field_key]) ) {
        $acf_field_value = sanitize_text_field( $_POST['acf'][$acf_field_key] );
        update_field( $acf_field_key, $acf_field_value, $order_id ); 
    }
}

代码放在活动子主题(或活动主题)的functions.php文件中。测试和作品。
现在,该字段显示在订单页面的“管理员”中,并带有提交的值。

以干净的方式处理多个高级自定义字段**

首先,我在ACF字段组设置中设置了2个字段:

代码如下:

add_action( 'woocommerce_after_order_notes', 'checkout_display_acf_field' ); 
function checkout_display_acf_field() { 
    $acf_field_key_arr = array ( // Here set the all required fields Keys in the array
        'field_648715e6451d1',
        'field_64873b2d5f57d'
    );
    
    // Loop through each field key in the array
    foreach ( $acf_field_key_arr as $acf_field_key ) {
        acf_form( array(
            'form' => false, 
            'fields' => array( $acf_field_key )
        ) );
    }
}

add_action( 'woocommerce_checkout_update_order_meta', 'acf_update_checkout_field' );
function acf_update_checkout_field( $order_id ) {
    $acf_field_key_arr = array (  // Here set the all required fields Keys in the array
        'field_648715e6451d1',
        'field_64873b2d5f57d'
    );
    
    // Loop through each field key in the array
    foreach ( $acf_field_key_arr as $acf_field_key ) {
        if ( isset($_POST['acf'][$acf_field_key]) ) {
            $acf_field_value = sanitize_text_field( $_POST['acf'][$acf_field_key] );
            update_field( $acf_field_key, $acf_field_value, $order_id ); 
        }
    }
}

代码放在活动子主题(或活动主题)的functions.php文件中。测试和作品。
结帐页面显示:

kmpatx3s

kmpatx3s2#

谢谢你的回答!我有一些文本字段和2个字段在结帐上传文件。这些字段的值我保存到用户的 meta。但是如何在结帐时上传文件呢?
下面是我代码:

add_action( 'woocommerce_before_order_notes', 'checkout_display_acf_field' ); 
function checkout_display_acf_field() { 
    if( is_user_logged_in() ) { 
        // If user is logged in, do not display the fields and return early.
        return;
    }

    $acf_field_key_arr = array ( // Here set the all required fields Keys in the array
'field_6490a0b6dcebf',
'field_6490a14adcec0',
'field_6490a156dcec1'
    );
    
    // Loop through each field key in the array
    foreach ( $acf_field_key_arr as $acf_field_key ) {
        acf_form( array(
            'form' => false, 
            'fields' => array( $acf_field_key )
        ) );
    }
}

add_action( 'woocommerce_checkout_update_user_meta', 'acf_update_checkout_field' );
function acf_update_checkout_field( $order_id ) {
    $acf_field_key_arr = array (  // Here set the all required fields Keys in the array
'field_6490a0b6dcebf',
'field_6490a14adcec0',
'field_6490a156dcec1'
    );

    // Get the user id
    $user_id = get_current_user_id();
    
    // Loop through each field key in the array
    foreach ( $acf_field_key_arr as $acf_field_key ) {
        if ( isset($_POST['acf'][$acf_field_key]) ) {
            $acf_field_value = sanitize_text_field( $_POST['acf'][$acf_field_key] );
            update_user_meta( $user_id, $acf_field_key, $acf_field_value ); 
        }
    }
}

相关问题