我正在尝试删除用户角色“um_member”的Woocommerce“立即购买”按钮。
我已经能够通过使用if ( is_user_logged_in() ) {
但是,当我尝试使用此处的用户角色代码段时:https://docs.ultimatemember.com/article/164-getrole if ( $ultimatemember->user->get_role() == ‘um_member’ ) {
我收到以下错误:Call to a member function get_role() on null
以下是登录用户的完整工作代码段:
// If User is not logged in don't allow them to purchase
if ( is_user_logged_in() ) {
} else {
//function for deleting ....
function remove_product_description_add_cart_button(){
global $product;
// Set HERE your category ID, slug or name (or an array)
$category = 'restricted';
//Remove Add to Cart button from product description of product with id 1234
if ( has_term( $category, 'product_cat', $product->id ) )
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}
add_action('wp','remove_product_description_add_cart_button');
}
以下是我尝试将其实现为受用户角色限制的方式:
// If User is not logged in don’t allow them to purchase
um_fetch_user( get_current_user_id() );
if ( $ultimatemember->user->get_role_name() == 'member' ) {
} else {
//function for deleting ….
function remove_product_description_add_cart_button(){
global $product;
// Set HERE your category ID, slug or name (or an array)
$category = 'restricted';
//Remove Add to Cart button from product description of product with id 1234
if ( has_term( $category, 'product_cat', $product->id ) )
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}
add_action('wp','remove_product_description_add_cart_button');
}
任何帮助都会对此非常感激。我也尝试过Wordpress上的终极会员支持论坛,但尚未得到开发者的任何直接回复。
答案 0 :(得分:1)
我完全重新审视了您的代码。在没有任何担保的情况下尝试以下操作:
add_action('woocommerce_single_product_summary','non_member_remove_single_add_to_cart', 2 );
function non_member_remove_single_add_to_cart(){
global $product, $ultimatemember;
um_fetch_user( get_current_user_id() );
// Check if it's a member user role
$is_member = $ultimatemember->user->get_role() == 'member' ? true : false;
// HERE set your categories in the array (IDs, slugs or names)
$categories = array('restricted');
// Remove single Add to Cart button
if ( ! $is_member && has_term( $category, 'product_cat', $product->get_id() ) )
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}
代码放在活动子主题(或活动主题)的function.php文件中。未经测试,它可以工作。
基于这2个Ultimatemember片段代码:
答案 1 :(得分:1)
谢谢@LoicTheAztec!
我最终能够获得终极会员的支持,我的原始解决方案存在两个问题。
昨天UM 2.0主要更新中的全局变量发生了变化 - $ultimatemember->user->get_role()
现在更改为UM()->user()->get_role()
- 他们还没有改变文档。
代码仍然无效,因为每个成员都有多个角色(例如:wordpress默认'订阅者'&最终成员'成员')所以支持再次重新工作。
这是没有我的WooCommerce脚本的工作解决方案:
$user = wp_get_current_user();
if ( in_array( 'um_member', (array) $user->roles ) )
{
// DO THIS IF USER IS A MEMBER
} else {
// DO THIS IF USER IS NOT A MEMBER
}
以下是我用来删除未经批准的客户按钮的完整解决方案,而是显示"受限制的产品"显示自定义字段的通知框:
$user = wp_get_current_user();
if ( in_array( 'um_member', (array) $user->roles ) )
{
} else {
//function for deleting ....
function remove_product_description_add_cart_button(){
global $product;
// Set HERE your category ID, slug or name (or an array)
$category = 'restricted';
//Remove Add to Cart button from product description of product with id 1234
if ( has_term( $category, 'product_cat', $product->id ) )
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}
add_action('wp','remove_product_description_add_cart_button');
add_action( 'woocommerce_single_product_summary', 'restrict_access', 20 );
}
function restrict_access() {
echo '<div class="restrict-access"><h4>';
the_field('notice_title' , 'option');
echo '</h4><p>';
the_field('notice_details' , 'option');
echo '</p><a class="et_pb_button" href="/restricted-product">';
the_field('notice_button_text' , 'option');
echo '</a></div>';
}
非常感谢你对此的帮助。