我正在尝试向结帐页面添加其他字段。我已经设置了 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);
}
这是订单中的“已更新”字段(仍为空):
当我将值硬编码为 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);
}
有谁知道为什么它没有将输入的内缝值填充到订单中?
提前非常感谢您!
您没有使用与 ACF 一起使用的正确字段 ID。
首先在管理 ACF 字段组中单击“屏幕选项”:
然后选择显示字段“slug”和“Field 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 文件中。已测试并有效。
结账页面显示:
这段代码对我来说非常有用——但我还想在加载结帐表单时从 ACF 用户字段加载现有值(如果存在)。我似乎无法弄清楚。