我发现this thread但它并不完全符合我的要求。Woocommerce购买后的默认角色和角色
我的问题是,如何将默认的Woocommerce角色“客户”更改为例如“订阅者”为新的注册用户。 然后,如果用户签出(购买产品),则将角色从“订户”更改为“客户”。
我在问这个问题,因为我想为每个用户角色显示不同的内容:“注册客户”和“订阅(付费)客户”。
我发现this thread但它并不完全符合我的要求。Woocommerce购买后的默认角色和角色
我的问题是,如何将默认的Woocommerce角色“客户”更改为例如“订阅者”为新的注册用户。 然后,如果用户签出(购买产品),则将角色从“订户”更改为“客户”。
我在问这个问题,因为我想为每个用户角色显示不同的内容:“注册客户”和“订阅(付费)客户”。
问题的第一部分是更改由WooCommerce创建的用户的默认角色。老实说,我可能会将默认角色作为客户。然后为购买特定产品的人创建新的角色/功能。
add_filter('woocommerce_new_customer_data', 'so_29647785_default_role');
function so_29647785_default_role($data){
$data['role'] = 'subscriber'; // the new default role
return $data;
}
正如你在我的其他答案看到(以及我重贴的答案),你可以做的事情,一旦用户完成支付,但钩住woocommerce_order_status_completed
钩。
要使代码适应特定产品的某些操作,您需要遍历订单项并根据产品ID检查它们。将999替换为相关产品的ID。
add_action('woocommerce_order_status_completed', 'so_29647785_convert_customer_role');
function so_29647785_convert_customer_role($order_id) {
$order = new WC_Order($order_id);
if ($order->user_id > 0) {
foreach ($order->get_items() as $order_item) {
if(999 == $order_item[ 'product_id' ]) {
$user = new WP_User($order->user_id);
// Remove existing role
$user->remove_role('customer');
// Add new role
$user->add_role('subscriber');
}
}
}
}
注:完全未经测试,但在理论上看起来是正确的。
谢谢你的回答!我会在我的网站上测试这个。关于将默认角色更改为“订阅者”。你是对的,将默认角色“客户”保持原样,然后创建一个新角色是有意义的。 “付费客户”为结帐用户。 – Teon
只有建议...如果你想显示或隐藏内容而不是产品,我会强烈建议你使用付费会员专业https://wordpress.org/plugins/paid-memberships-pro/而不是woocommerce。 –