向wordpress客户订单添加自定义数据


Adding custom data to wordpress customer order

我需要捕获一个变量,用于跟踪来自传入URL的引用,并将其附加到wordpress/woocommerce中的订单。目前在themes header.php文件中,我有:

    if(!empty($_GET['refID'])) $_SESSION['refID'] = $_GET['refID'];

然后,在我的themes functions.php文件我有:

    if(!empty($_SESSION['refID'])) $rID = $_SESSION['refID'];
    else $rID = "no var set";
    add_action( 'woocommerce_checkout_update_order_meta', 'my_add_order_meta', 10, 2 );
    function my_add_order_meta( $order_id, $rID ) {
        update_post_meta( $order_id, 'refID', $rID );
    }

会话变量出现在WP会话中,但在其发布后的顺序中没有出现任何内容。我有很少的经验与WP/woocommerce工作,想知道如果这是甚至这样做的正确方法?

您正在设置会话变量,但没有使用它…我认为你的函数应该像下面这样:

add_action( 'woocommerce_checkout_update_order_meta', 'my_add_order_meta' );
function my_add_order_meta( $order_id ) {
    // Get the stored refID
    $refID = isset( $_SESSION['refID'] ) ? $_SESSION['refID'] : null;
    // Update the refID meta
    update_post_meta( $order_id, 'refID', $refID );
}

由于某种未知的原因,变量没有从会话传递到$rID。通过使用实际的会话变量,函数现在将额外的数据发送到订单中。我还用$rID代替了函数调用中的$post:

    add_action( 'woocommerce_checkout_update_order_meta', 'my_add_order_meta', 10, 2 ); 
    function my_add_order_meta( $order_id, $posted ) {
    update_post_meta($order_id, 'refID', $_SESSION['refID']);   
    }