:)
私は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を取得する方法。何か案は?
コード全体を見ると、非常に関連性の高い例があります。
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' );