2016-04-19 18 views
2

警告:私はソロフリーランスのデザイナーではない私はmembershipと呼ばれるWordpressのユーザーメタにカスタムフィールドを作成した開発者;-)保存WooCommerce注文製品名

です。

私は、チェックアウトwith help from this answermembershipカスタムフィールドにWooCommerceの商品名を保存するために次のコードを試しました。

更新しようと

function wascc_woocommerce_checkout_update_user_meta_membership ($customer_id, $posted) { 

    if (isset($posted['$orderid'])) { 
     $order = $posted['$orderid']; 
    } 
    $theorder = new WC_Order($order); 
    $items = $theorder->get_items(); 

    foreach ($items as $item) { 
     $product_name = $item['name']; 
    } 

    if (!(empty($product_name))) { 
     update_user_meta($customer_id, 'membership', $product_name); 
    } 

} 

add_action('woocommerce_checkout_update_user_meta', 'wascc_woocommerce_checkout_update_user_meta_membership', 10, 2); 

それはエラーを生成しませんが、membershipに製品名を保存しません。

ヘルプありがとうございます。

Last question may be related

+0

あなたが受け入れた@ Reigelの回答をもう一度お読みください。 2番目のパラメータは '$ posted'です。これには上記のコードで使用している' $ order_id'ではなく '$ _POST []'の値が含まれています。コードは有効なオーダーを見つけることができないため、メタを保存しません。 –

+2

あなたの最後の質問から 'woocommerce_checkout_update_order_meta'を使用してください...それは注文IDを持っています...あなたは注文IDから顧客IDを得ることができます...私はモバイルで現在完全なコードを与えることはできません... – Reigel

+0

order_idが 'woocommerce_checkout_update_order_meta'にどこにあるのかわかりません。 – Steve

答えて

2

私がコメントしたように、woocommerce_checkout_update_order_metaを使用してください。

このような何か:

function wascc_woocommerce_checkout_update_user_meta_membership ($order_id) { 

    $theorder = new WC_Order($order_id); 
    $items = $theorder->get_items(); 

    foreach ($items as $item) { 
     $product_name = $item['name']; 
    } 

    if (!(empty($product_name))) { 

     // Gets the customer/user ID associated with the order. Guests are 0. 
     $customer_id = $theorder->get_user_id(); 

     update_user_meta($customer_id, 'membership', $product_name); 

    } 

} 

add_action('woocommerce_checkout_update_order_meta', 'wascc_woocommerce_checkout_update_user_meta_membership'); 

でも、私は...あなただけの最後の項目を得るためにあなたのforeachループと疑問をループしているのか?

+0

はい! :-) Reigelありがとうございます。私はforeachループについても同じことを考えましたが、最後の項目を取得する方法は調査しませんでした。そうします。 – Steve

関連する問題