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

Adding custom data to wordpress customer order

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

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

然后,在我的主题 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 );
    }

session变量出现在WP session中,但是在发布后的顺序中没有出现。我使用 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 替换了 $posted:

    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']);   
    }