如何在 WooCommerce 中隐藏产品或按类别或角色隐藏产品

已发表: 2020-02-24

您可以使用多种方法在 WooCommerce 和这篇文章中隐藏特定产品; 我们将探讨在 WooCommerce 中隐藏产品的每种方法。您应该考虑从 WooCommerce 商店隐藏产品的原因有多种,但最重要的是产品缺货或产品保留给特定的客户或用户角色。

隐藏 WooCommerce 产品

如果您想隐藏缺货产品,您应该首先考虑在产品上添加缺货标签,而不是隐藏产品。

尽管如此,如果您仍想隐藏这些缺货产品或任何其他 WooCommerce 产品,我将在这篇文章中分享如何按 ID、名称或类别隐藏产品。

使用选项隐藏 WooCommerce 产品

默认情况下,WooCommerce 带有一个很好的选项,允许用户控制产品的可见性。

您可以在发布图像之前通过控制可见性选项在 WooCommerce 中创建隐藏产品。 要使用可见性在 WooCommerce 中隐藏产品,您需要执行以下步骤:

  1. 登录您的 WordPress 网站仪表板
  2. 单击下图所示的产品菜单,以便使用可见性选项访问要对用户隐藏的产品。 如何在 Woocommerce 中隐藏产品
  3. 从您要隐藏的所有产品列表中选择产品,如下所示,然后单击编辑以访问产品编辑屏幕: 如何在 Woocommerce 中隐藏产品
  4. 在右侧发布元框下方的产品编辑屏幕中,有一个名为“目录可见性”的选项单击此链接,将出现一个带有选项的下拉菜单,最后一个选项为隐藏。
    当您选中此单选选项并单击确定然后更新帖子时,该产品将从商店目录中隐藏。 如这三个步骤 (1,2,3) 所示: 如何在 Woocommerce 中隐藏产品
  5. 当您保存这些选项并更新帖子时,产品可见性将设置为隐藏,如您在商店前端看到的那样: 如何在 Woocommerce 中隐藏产品
  6. 如果您在产品编辑屏幕的后端检查目录可见性选项,您应该会在帖子更新时看到它已更新为隐藏: 如何在 Woocommerce 中隐藏产品

这是从商店目录中隐藏 WooCommerce 产品的最快方法。 您还可以使用其他方法,例如向子主题添加代码。 让我们探索更多可用于在 WooCommerce 中隐藏产品的选项。

Woocommerce 从商店页面隐藏特定类别产品

如果您想在 WooCommerce 的商店页面中隐藏特定产品,您可以使用针对商店页面“woocommerce_product_query”的查询的操作挂钩来实现此目的。

回调函数应该使用 $tax_query 来缩小与您要隐藏的产品相关的条款。

在这种情况下,$tax_query 数组中的 terms 键相当于我在如何获取当前 WooCommerce 产品类别的帖子中解释的类别/标签。

假设我们想从“汽车零部件”类别中隐藏该产品。

隐藏 woocommerce 产品

我们可以使用添加到 functions.php 文件中的以下代码片段来隐藏商店页面中的产品:

 /**
 * 从商店页面按类别隐藏 WooCommerce 产品。
 *
 * @param $q
 */
 

add_action('woocommerce_product_query','njengah_hide_product_by_category_shop_page'); 

功能 njengah_hide_product_by_category_shop_page( $q ) {

    $tax_query = (array) $q->get('tax_query');

    $tax_query[] = 数组(
           '分类' => 'product_cat',
           '字段' => '蛞蝓',
           'terms' => array('uncategorised','auto-parts'), // 店铺页面不显示“汽车配件”类别的产品。
           '操作员' => '不在'
    );


    $q->set('tax_query', $tax_query);

}

将此代码添加到主题功能中,您可以将“汽车零件”类别替换为您希望隐藏产品的任何其他类别,这将有效地在商店页面中隐藏该类别中的产品,如下所示:

隐藏 woocommerce 产品

WooCommerce 隐藏产品,除非登录

在 WooCommerce 中隐藏产品的另一种常见方法是根据用户登录或未登录的状态来限制产品可见性。

第一步显然是检查用户是否登录。我在这里详细解释了——如何检查用户是否在 WordPress 中登录。

我们将使用此代码检查登录状态,然后将其与查询结合起来,根据用户的登录状态有条件地隐藏 WooCommerce 产品。

代码应如下所示:

 **
 * 如果用户未登录,则隐藏 WooCommerce 产品 
 *
 * @param $查询
 */
 

功能njengah_hide_product_if_user_not_logged($查询){
	
	
    if ( $query->is_main_query() && is_woocommerce() && !is_user_logged_in() ) {
		
        $tax_query = 数组(
            大批(
                    '分类' => 'product_cat',
                    '字段' => '蛞蝓',
                    'terms' => array('uncategorised','auto-parts'), // 店铺页面不显示“汽车配件”类别的产品。
                    'operator'=> 'NOT IN' // 排除
                )
            );

        $query->set('tax_query', $tax_query);
    }
}

add_action('pre_get_posts', 'njengah_hide_product_if_user_not_logged');

如您所见,我们在继续查询之前有条件地检查用户是否使用 is_user_logged_in() 函数登录。

Woocommerce 按用户角色隐藏产品

您还可以按用户角色隐藏产品。 您需要首先获取当前登录的用户及其用户角色,正如我在上一篇关于如何在 WordPress 中获取当前用户角色的教程中概述的那样 获取用户角色的代码如下:

 $user = wp_get_current_user(); // 获取&设置当前用户

        $roles = ( 数组 ) $user->roles; // 获取角色

        $roles[0] //当前用户角色

我们应该将此代码与之前的 pre_get_posts 操作结合起来,并且将为所有用户(希望管理员)隐藏产品的代码如下:

 /**
 * 按用户角色隐藏 WooCommerce 产品,例如在这种情况下,只有管理员才能看到该产品 
 *
 * @param $查询
 */


功能 njengah_hide_product_by_user_role( $query ) {
	
	 $user = wp_get_current_user(); // 获取&设置当前用户 
	 $roles = ( 数组 ) $user->roles; // 获取角色 
	
	
    if ( $query->is_main_query() && is_woocommerce() && $roles[0] != 'administrator' ) {
		
        $tax_query = 数组(
            大批(
                    '分类' => 'product_cat',
                    '字段' => '蛞蝓',
                    'terms' => array('uncategorised','auto-parts'), // 店铺页面不显示“汽车配件”类别的产品。
                    'operator'=> 'NOT IN' // 排除
                )
            );

        $query->set('tax_query', $tax_query);
    }
}

add_action('pre_get_posts', 'njengah_hide_product_by_user_role');

正如您在这行代码中看到的,我们有条件地检查查询我引入了条件来检查用户角色是否不是管理员 - $roles[0] != 'administrator' 然后我们继续查询。 这就是您根据用户角色隐藏 WooCommerce 产品的方式。

您可以阐述此示例以满足您的特定需求,您还可以结合所有这些案例来创建一种隐藏 WooCommerce 产品的条件方法。

最后的想法

在这篇文章中,我们重点介绍了隐藏 WooCommerce 产品的三种常用方法,包括按用户角色隐藏、隐藏产品(除非用户登录)和隐藏 WooCommerce 产品而无需任何这些条件。 我们还概述了使用产品编辑屏幕中提供的目录可见性选项隐藏 WooCommerce 产品的最简单方法。 我希望您现在可以轻松实施这些解决方案中的任何一个,以从您的商店中隐藏 WooCommerce 产品。