WooCommerce Checkout上的高级自定义字段(ACF)

时间:2018-12-06 19:30:31

标签: php wordpress woocommerce advanced-custom-fields

我正在使用ACF plugin来管理WooCommerce网站中的各种自定义元数据。我要设置的功能之一是向WooCommerce结帐页面添加自定义字段。我遵循WC's documentation page上概述的一般概念,该概念使您可以通过woocommerce_after_order_notes挂钩将自定义表单附加到WC checkout表单。在这里,我使用acf_form ()函数输入acf表单,并将表单设置为false,以使其不包含ACF表单元素(即ACF提交按钮)。之所以可以正常工作,是因为我能够成功将ACF自定义字段显示在适当位置的签出字段中。

我正在尝试将ACF update_field()函数与woocommerce_checkout_update_order_met挂钩结合使用。按照ACF community here的建议。这是我到目前为止放置在我的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自定义字段(选择值)时,它不会保存该值。经过一些挖掘后,看来我需要在结帐页面模板上的wordpress get_header()函数上方设置acf_form_head(),以便ACF提取和发布数据。但是,当我执行此操作并完成结帐过程,然后在woocomerce的结帐页面上单击“提交订单”时,我得到一个“离开站点?-您所做的更改可能不会保存”-留下-取消该页面将尝试处理订单。当我单击“离开”时,它会转到订单确认页面,但不保存元值。当我单击“取消”时,订单处理器只会旋转并不会刷新页面。

在这一点上,我正在尽力使它正常工作。我必须使用ACF,因为在显示内容以及数据将与其他形式的其他数据一起使用时,使用了一些高级的条件逻辑。因此,使用基本的结帐表单不能在插件上添加选项。另外,ACF的支持可能需要数周的时间,这就是我在这里发布的原因。任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:1)

弄清楚了。 acf_form_head()函数是许多操作的组合。这些操作之一(acf / submit_form)包含一个重定向功能,当通过另一种表单提交时,该功能显然不起作用。解决方案是使用acf / save_post操作而不是Submit_form。