web-dev-qa-db-ja.com

Woocommerce:注文完了後のユーザーロールの変更

:)

私はwoocコマースでワードプレスを使用しています、そして、私は次のステップを自動化したいです。注文が完了したら、その注文IDに関連付けられているユーザーロールを「customer」から「subscriber」に変更します。


周りを検索することで、functions.phpのフックを使うことでこれを達成できるはずです。

add_action( 'woocommerce_order_status_completed', 'change_role_from_customer_to_subscriber' );

それから関数を追加します。

function change_role_from_customer_to_subscriber($order_id){
// code to change role to subscriber
}

コードでは、次の2つのことを行う必要があると思います。1)その注文IDに関連付けられているユーザーIDを取得します2)そのユーザーIDの役割をサブスクライバに変更します


私はたくさん試しましたが、うまくいきませんでした(正しいユーザーIDを取得することも、ユーザーIDの役割を変更することもしませんでした)。それで、どんな助けでも評価されるでしょう!私は以前にスタックオーバーフローについて尋ねられた2つの関連した質問を見ました、しかし残念ながらそこでの答えは私のために働きませんでした。誰かが私を助けてくれることを願っています!

どうもありがとう! :)



編集:誰かが私に問題の後半部分を手伝ってくれたので、それは私にとって素晴らしいニュースです:)

残念ながら、私はまだ最初の部分を考え出していません:注文IDに関連付けられているユーザーIDを取得する方法。何か案は?

2
Rostam

コード全体を見ると、非常に関連性の高い例があります。

function woocommerce_paying_customer( $order_id ) {

    $order = new WC_Order( $order_id );

    if ( $order->user_id > 0 ) {

        $old_spent = absint( get_user_meta( $order->user_id, '_money_spent', true ) );
        update_user_meta( $order->user_id, '_money_spent', $old_spent + $order->order_total );

        $old_count = absint( get_user_meta( $order->user_id, '_order_count', true ) );
        update_user_meta( $order->user_id, '_order_count', $old_count + 1 );
    }
}
add_action( 'woocommerce_order_status_completed', 'woocommerce_paying_customer' );

これは、$ order_isがwoocommerce_order_status_completedフックに渡されたことを示しています。 $ order_idから、user_idをプロパティとして使用して、新しい注文オブジェクトを作成できます。

その知識を持って、私たちはただそのユーザIDから新しいユーザオブジェクトを取得し、そして古いロールを取り除いて、そして最後に新しいロールを適用するという機能の内側の部分を直すことができると思う。

function wpa_120656_convert_paying_customer( $order_id ) {

    $order = new WC_Order( $order_id );

    if ( $order->user_id > 0 ) {
        update_user_meta( $order->user_id, 'paying_customer', 1 );
        $user = new WP_User( $order->user_id );

        // Remove role
        $user->remove_role( 'customer' ); 

        // Add role
        $user->add_role( 'subscriber' );
    }
}
add_action( 'woocommerce_order_status_completed', 'wpa_120656_convert_paying_customer' );
3
helgatheviking