WooCommerce 根据用户角色隐藏指定分类的产品

创客云

我有一个客户案例需要有以下要求,需要能够将他们的WooCommerce WordPress网站分为两类,如果用户以“vip”身份登录,则只会从数据库中提取“vip”类别中的产品。但是,如果用户未登录或登录但不是“vip”用户,则不显示“vip”类别的产品。

方法一

使用在创建查询变量对象之后但在运行实际查询之前调用的pre_get_posts wordpress钩子,所以它非常适合这种情况。我们在这里想象角色名称是’VIP’,产品类别的ID是’123′。

这是自定义代码:

  1. function wholeseller_role_cat( $query ) {
  2.  
  3.     // Get the current user
  4.     $current_user = wp_get_current_user();
  5.  
  6.     if ( $query->is_main_query() ) {
  7.         // Displaying only "vip" category products to "whole seller" user role
  8.         if ( in_array( 'vip', $current_user->roles ) ) {
  9.             // Set here the ID for vip category 
  10.             $query->set( 'cat', '123' ); 
  11.  
  12.         // Displaying All products (except "123" category products) 
  13.         // to all other users roles (except "vip" user role)
  14.         // and to non logged user.
  15.         } else {
  16.             // Set here the ID for vip category (with minus sign before)
  17.             $query->set( 'cat', '-123' ); // negative number
  18.         }
  19.     }
  20. }
  21. add_action( 'pre_get_posts', 'wholeseller_role_cat' );

此代码位于子主题或主题的function.php文件中,或者页可以写到自定义插件中。

方法二

使用woocommerce_product_query WooCommerce钩子(我们仍然在这里用户角色是’vip’,产品类别的ID是’123′)

这是自定义代码:

  1. function wholeseller_role_cat( $q ) {
  2.  
  3.     // Get the current user
  4.     $current_user = wp_get_current_user();
  5.  
  6.     // Displaying only "123" category products to "whole seller" user role
  7.     if ( in_array( 'vip', $current_user->roles ) ) {
  8.         // Set here the ID for vip category 
  9.         $q->set( 'tax_query', array(
  10.             array(
  11.                 'taxonomy' => 'product_cat',
  12.                 'field' => 'term_id',
  13.                 'terms' => '123', // your category ID
  14.             )
  15.         ) ); 
  16.  
  17.     // Displaying All products (except "123" category products) 
  18.     // to all other users roles (except "vip" user role)
  19.     // and to non logged user.
  20.     } else {
  21.         // Set here the ID for vip category
  22.         $q->set( 'tax_query', array(
  23.             array(
  24.                 'taxonomy' => 'product_cat',
  25.                 'field' => 'term_id',
  26.                 'terms' => '123', // your category ID
  27.                 'operator' => 'NOT IN'
  28.             )
  29.         ) ); 
  30.     }
  31. }
  32. add_action( 'woocommerce_product_query', 'wholeseller_role_cat' );

如果要使用类别slug而不是类别ID,则必须部分替换(两个数组):

  1.             array(
  2.                 'taxonomy' => 'product_cat',
  3.                 'field' => 'slug',
  4.                 'terms' => 'array( 'PUT YOUR CATEGORY HERE' ),
  5.                 // your category slug (to use the slug see below)

您可以根据需要添加,在if语句中使用some woocommerce conditionals tags来限制更多。

本文由 CityMall 整理发布如需转载,请注明出处:https://www.22vd.com/60943.html
云模板

发表评论

热销模板

高端信息技术产品展示DedeCMS织梦中英文模板

Envato

本站承接 WordPress / DedeCMS / ThinkPHP 等
系统建站、仿站、开发、定制等业务!