当前位置: 首页 > 知识库问答 >
问题:

WooCommerce结帐的高级自定义字段(ACF)

施阳曜
2023-03-14

我正在使用ACF插件来管理一个WooCommerce网站内的各种自定义元数据。我试图设置的功能之一是向WooCommerce结帐页面添加自定义字段。我遵循WC文档页面上概述的一般概念,它允许您通过woocommerce_after_order_notes钩子将自定义表单追加到WC结帐表单。从那里,我使用acf_form()函数输入acf表单,表单设置为false,以允许它不包含acf表单元素(即acf提交按钮)。这是因为我能够成功地将ACF自定义字段显示在签出字段的适当位置。

从这里开始,我尝试将ACF update_field()函数与woocommerce_checkout_update_order_met挂钩结合使用。正如ACF社区在这里推荐的那样。以下是我的代码,我已经放置在我的functions.php文件中:

add_action( 'woocommerce_after_order_notes', 'my_custom_budgetcenter_field' ); //This runs the my_custom_budgetcenter_field funtion within the chekout form.

function my_custom_budgetcenter_field( ) { 
    echo '<div id="my_custom_budget center_field"><h2>' . __('Budget Center Field') . '</h2></div>'; // This Line Adds A header Line the the bottom of the WC Checkout Page. 
    acf_form(array('form' => false,'fields' => array('acf_selected_budget_center'))); //This line outputs the ACF form with form value set to false so its included in the woocommerce checkout form.  It then sets the fields to equal my the acf_selected_budget_center field group
}

这是我有问题的部分:

add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_budgetcenter_field_update_order_meta' ); //This line runs the  my_custom_budgetcenter_field_update_order_meta when woocomerce updates the order meta when submiting the form.

function my_custom_budgetcenter_field_update_order_meta( $order_id ) { 
        $valueofbc = get_field( "field_5c005d0c5f829" );
        $bcfieldkey = "field_5c005d0c5f829";
        update_field( $bcfieldkey, $valueofbc, $order_id  );
    
} ;

当我手动设置$valueOfbc字符串时(例如:$valueOfbc=“001-activities”;),一切都正常。我可以提交一个订单,该字段将用硬编码字符串更新。但是,当我将它设置为get_field函数选项以便它使用ACF自定义字段(一个选择值)时,它不会保存该值。在做了一些挖掘之后,我似乎需要(ed)在结帐页面模板的wordpress get_header()函数上方设置acf_form_head(),以便ACF提取和发布数据。然而,当我这样做并完成结帐过程,然后在Woocomerce的结帐页面上单击“Submit order”时,我会得到一个“离开站点?--您所做的更改可能不会被保存”--leave-cancel“JavaScript通知,当页面试图处理订单时。当我单击”Leave“时,它会转到订单确认页面,但不会保存元值。当我单击”cancel“时,订单处理器只是不定期地旋转,从不刷新页面。

在这一点上,我无计可施,试图让这个工作。我不得不使用ACF,因为在什么是显示以及数据将以其他形式与其他数据一起工作的方式上有一些高级条件逻辑。所以使用一个基本的结帐表单添加插件在不是一个选项。此外,ACF的支持可能需要几个星期,这就是为什么我在这里张贴。任何帮助都将不胜感激。

共有1个答案

寇和璧
2023-03-14

想通了。acf_form_head()函数是许多操作的组合。其中一个动作(acf/submit_form)包括一个重定向函数,该函数在通过另一个表单提交时显然不起作用。解决方案是使用acf/save_post操作而不是submit_form。

 类似资料:
  • 我在修改我安装的WordPress流行帖子插件时遇到了一些问题。 它可以选择从自定义字段获取缩略图,我已将其输入为“image_facebook”。但是缩略图没有显示。 在检查代码时,我发现imgsrc有post id而不是返回图像URL。 我已经把问题缩小到我安装的另一个插件http://wordpress.org/plugins/advanced-custom-fields/ 当它处于活动状态

  • WooCommerce自定义结账字段的插件有Custom Checkout Fields for WooCommerce等,如果你想要更多的自由,就用代码来解决吧。本文介绍一种用代码来自定义WooCommerce结账字段的方法。 WooCommerce自定义结账字段代码 代码单独保存一个文件引入,或直接放到子主题的functions.php中,第二种方式请将 defined('WPINC') or

  • WordPress-WooCommerce 我想做的是: null 邮件里什么也没印。 请解决。提前谢了。

  • 所以我在一个以FoundationPress为主题的wordpress站点上工作,最近我将ACF升级到了Pro版本,允许repeater字段。所以我试着让客户用中继器添加新的社交媒体帐户。 http://imgur.com/ft58spd http://imgur.com/mydpawl 上面您可以看到中继器是如何在后端设置的。 header.php: 没有任何东西输出到HTML中。 如果我遗漏了

  • 您好,我有一个关于woocommerce中自定义结账字段的问题。我在结帐表单中创建了一个自定义字段,一切都很顺利。该字段包含客户卡号。我还设法将字段值(第一次输入时)保存在wp usermeta中,这样它就不会只与订单一起出现,而是与客户详细信息一起保存。 现在我想做以下几点。一旦注册客户返回商店,进入结帐表单,新字段(如果不是empyt)将自动显示,而不是每次都要求客户插入他们的卡号。 我添加到