私のウェブサイトはwordpress、 "events calendar"プラグイン、 "woocommerce"を使用しており、 "Advanced Access Manager"プラグインで役割と機能を管理しています。商品カテゴリに基づいて顧客に機能を追加
購入したばかりの商品カテゴリに基づいて購入者の役割に機能を追加する機能を追加しようとしています。
(ちょうど買った)またはユーザーIDのイベントカテゴリを取得しようとしましたが、何かがうまくいかず、プロセスを完了する必要があるため、段階的にテストすることはほとんど不可能です関数は機能します。ここで
は、コードは次のとおりです。
add_action('woocommerce_payment_complete', 'custom_process_order', 10, 1);
function custom_process_order($order_id) {
$order = new WC_Order($order_id);
$myuser_id = (int)$order->user_id;
$user_info = get_userdata($myuser_id);
$items = $order->get_items();
// need to test that :
$beta= str_replace(
':',
'',
tribe_get_event_categories($event->ID, array(
'echo' => false,
'label' => '',
' label_before' => '',
'label_after' => '',
'wrap_before' => '',
'wrap_after' => '',
)));
$beta = strip_tags($beta);
foreach ($items as $item) {
//check if user already have capabilitie
if (! user_can($user_id, $capability)){
//add capability to specific user
$user = new WP_User($user_id);
$user->add_cap($beta);
}
}
return $order_id;
}
だから例えば、顧客は、カテゴリ「course_paris_night」で製品を購入し、それは役割機能「course_paris_night」を持っている必要があります。この機能を使用すると、この顧客は例で同じカテゴリのチュートリアルにアクセスします。
コードやテスト方法についてお問い合わせいただきありがとうございます。 (学ぶ必要があります)
SO !!! 4月24日...数日後:
add_action('woocommerce_payment_complete', 'custom_process_order', 10, 1);
function custom_process_order($order_id) {
global $current_user;
global $wp_roles;
$order = new WC_Order($item->ID);
$order->populate($item);
$items = $order->get_items();
foreach ($items as $key => $item2) :
$event_id_in_product = absint($item2['product_id']);
endforeach;
// trouve la catégorie du produit acheté par le stagiaire
// Get all terms associated with post in woocommerce's taxonomy 'product_cat'
$terms = get_the_terms($event_id_in_product, 'product_cat');
//Get an array of their IDs
$term_ids = wp_list_pluck($terms,'term_id');
//Get array of parents - 0 is not a parent
$parents = array_filter(wp_list_pluck($terms,'parent'));
//Get array of IDs of terms which are not parents.
$term_ids_not_parents = array_diff($term_ids, $parents);
//Get corresponding term objects.
$terms_not_parents = array_intersect_key($terms, $term_ids_not_parents);
//Extract the name of the category from the array and post it.
foreach($terms_not_parents as $term_not_parent){
$beta = $term_not_parent->name;
$alpha = strip_tags($beta);
$alpha = trim(strip_tags($alpha));
$alpha = str_replace(' - ',' ',$alpha);
$alpha = strtolower($alpha);
$all_roles = $wp_roles->roles;
$user = new WP_User($current_user->ID);
$result = $user->add_role($alpha);
return $order_id;
}
}
しかし、私は良い結果は得られません。だからここに、それは私が得るものです再びテストするユーザ情報を持っています
WP_User Object
(
[data] => stdClass Object
(
[ID] => 50
[user_login] => buyer.new
[user_pass] => $P$BKlx7.CzfvnLL43EZaZdmo84shZQo41
[user_nicename] => buyer-new
[user_email] => [email protected]
[user_url] =>
[user_registered] => 2016-04-23 22:05:27
[user_activation_key] =>
[user_status] => 0
[display_name] => New
)
[ID] => 50
[caps] => Array
(
[mycourse saint-malo intermédiaire] => 1
[mycourse paris avancé] => 1
)
[cap_key] => lep_capabilities
[roles] => Array
(
[0] => mycourse saint-malo intermédiaire
)
[allcaps] => Array
(
[read] => 1
[level_0] => 1
[read_private_tribe_organizers] => 1
[mycourse saint-malo intermédiaire] => 1
[mycourse paris avancé] => 1
)
[filter] =>
)
はNormaly私は[」の下に持っている必要があり、私のユーザーは、カテゴリ「mycourseサンマロintermédiaire」と「mycourseパリアヴァンセ」の下に二つの新しいコースを買っていた持っていますroles] => Array "という2つの新しい役割を持っていますが、そうではないことがわかります。
私のコードでは、2つの新しい役割が[caps]と[allcaps]に追加されますが、[roles]には追加されません!!!!
私は非常に近いと確信しています。何か案が ?
//更新日//
申し訳ありません
add_action('woocommerce_payment_complete', 'custom_process_order', 10, 1);
function custom_process_order($order_id) {
global $current_user;
global $wp_roles;
$all_orders = get_posts(array(
'numberposts' => -1,
//'meta_key' => '_customer_user',
//'meta_value' => get_current_user_id(),
'post_type' => 'shop_order',
'post_status' => 'completed',
));
$args = get_posts(array(
'numberposts' => -1,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => 'shop_order',
'post_status' => 'completed',
));
if(! empty($args)){
foreach($args as $item) {
setup_postdata($item);
$order = new WC_Order($item->ID);
$order->populate($item);
$items = $order->get_items();
foreach ($items as $key => $item2) :
$event_id_in_product = absint($item2['product_id']);
endforeach;
//trouve la catégorie du produit acheté par le stagiaire
//Get all terms associated with post in woocommerce's taxonomy 'product_cat'
$terms = get_the_terms($event_id_in_product, 'product_cat');
//Get an array of their IDs
$term_ids = wp_list_pluck($terms,'term_id');
//Get array of parents - 0 is not a parent
$parents = array_filter(wp_list_pluck($terms,'parent'));
//Get array of IDs of terms which are not parents.
$term_ids_not_parents = array_diff($term_ids, $parents);
//Get corresponding term objects.
$terms_not_parents = array_intersect_key($terms, $term_ids_not_parents);
//Extract the name of the category from the array and post it.
foreach($terms_not_parents as $term_not_parent){
$beta = $term_not_parent->name;
$alpha = strip_tags($beta);
$alpha = trim(strip_tags($alpha));
$alpha = str_replace(' - ',' ',$alpha);
$alpha = str_replace('Stage','stagiaire',$alpha);
$alpha = strtolower($alpha);
$all_roles = $wp_roles->roles;
$user = new WP_User($current_user->ID);
$result = $user->add_role($alpha, $alpha, array($alpha =>true,)); // Array was missing in previous version !
return $order_id;
}
}
}
これは私があなたに頼んでいるものを正確に追っていくことは容易ではありません。あなたに正直なところです。これは私が理解しているものです。 –
顧客が注文を完了した後、それらのアカウントを作成し、購入した商品のカテゴリーに基づいてその役割を持たせたいと考えています。その役割は、同じ名前のチュートリアルカテゴリに直接関係しています。 – imvain2
チュートリアルを自分のコースを購入する人に限定したいが、購入する製品のカテゴリに対応するチュートリアルにアクセスする必要があるとします。例:コースを「基本的」に購入するので、基本的な "チュートリアルではなく、"高度な "チュートリアルです。 (ユーザー役割と機能に基づいてアクセスを管理するためのプラグインを使用)顧客は "顧客役割"として登録されており、 "基本的なチュートリアル"にアクセスすることはできません。 –