在woocommerce_checkout_create_order钩子中获取自定义字段值

时间:2018-03-28 15:27:49

标签: php wordpress woocommerce checkout orders

这段代码我做错了什么?我无法检索post_meta值。我知道它已正确保存,因为值显示在订单编辑页面中。我只是无法在此功能中检索:

add_action( 'woocommerce_checkout_create_order', 'rev_change_total_on_checkout', 20, 1 );

function rev_change_total_on_checkout( $order ) {
    $new_total_price = get_post_meta( $order->id, '_rev_fee_estimate', true);
    $order->set_total($new_total_price );
}

基本上,我试图在提交结帐后根据我添加到结帐表单中的自定义字段值中以编程方式生成的值来更改总订单价值。如果我硬编码$ new_total_price的值,我就能实现这一点,所以我知道这个功能有效。我只需要检索自定义字段的保存值即可完成此操作。

1 个答案:

答案 0 :(得分:0)

认为_rev_fee_estimate尚未保存到数据库中,因为它是自定义字段。所以你可以得到任何相关的东西

相反,您需要获取已发布的值。我将使用密钥_rev_fee_estimate,但它可以是其他东西(您可以检查它,在结帐页面上检查生成的自定义字段的html代码。必要的密钥是属性" name"这个领域的价值)......

代码:

// Save an additional coverstart value in in the order post meta dat
add_action( 'woocommerce_checkout_create_order', 'initial_coverstart_custom_field_save', 20, 1 );
function initial_coverstart_custom_field_save( $order ) {
    if( ! isset($_POST['_rev_fee_estimate']) ) return;

    if( ! empty($_POST['_rev_fee_estimate']) )
    {
        $new_total_price = (float) sanitize_text_field( $_POST['_rev_fee_estimate'] )
        $order->set_total( $new_total_price );
    }
}

代码放在活动子主题(或活动主题)的function.php文件中。一旦您检查到您拥有此自定义字段的正确密钥,它就应该可以正常工作。