当前位置: 首页 > 知识库问答 >
问题:

基于用户角色的WooCommerce产品变化

支劲
2023-03-14

我用各种各样的产品建立了Woocommerce。

这些产品在一个属性上都有可能值为1kg、2kg和5kg的变化。

我还创建了一个“Aziende”用户组。我想一些产品的变化,只显示“阿齐恩德”的客户。我不想让其他客户看到这些变化。

例如:Aziende客户可以看到选项“1kg、2kg、5kg”,而其他客户角色只能看到1kg选项。

这在WooCommerce中可能吗?

共有1个答案

仰钧
2023-03-14

对如果覆盖文件woocommerce/templates/single product/add to cart/variable。php您可以找到变体选择框的代码。

在那里你可以做这样的事情:

首先,在处理角色时,我总是包含这个片段:

function user_has_role( $role, $user_id = null ) {

    if ( is_numeric( $user_id ) )
        $user = get_userdata( $user_id );
    else
        $user = wp_get_current_user();

    if ( empty( $user ) )
        return false;

    return in_array( $role, (array) $user->roles );
}

因此,它可以用作:

if(user_has_role("Aziende")){
    //do stuff
}

现在有了这个函数,并且知道要更改哪个模板,你应该能够在那个文件中做一些事情。它可以沿着这个:

// Get terms if this is a taxonomy - ordered
if ( taxonomy_exists( $name ) ) {
    $terms = wc_get_product_terms( $post->ID, $name, array( 'fields' => 'all' ) );
    foreach ( $terms as $term ) {
        if ( ! in_array( $term->slug, $options ) ) {
            continue;
        }
        if($name == 'pa_weight' && $term->slug != '1kg' ) { // or whatever your attribute is called, and whatever the attribute term is called. 
            if(!user_has_role('aziende'){
                continue;
            }
        }
        echo '<option value="' . esc_attr( $term->slug ) . '" ' . selected( sanitize_title( $selected_value ), sanitize_title( $term->slug ), false ) . '>' . apply_filters( 'woocommerce_variation_option_name', $term->name ) . '</option>';
    }
} else {
    foreach ( $options as $option ) {
        if($name == 'pa_weight' && $option != '1kg' ) { // or whatever your attribute is called, and whatever the attribute term is called. 
            if(!user_has_role('aziende'){
                continue;
            }
        }

        echo '<option value="' . esc_attr( sanitize_title( $option ) ) . '" ' . selected( sanitize_title( $selected_value ), sanitize_title( $option ), false ) . '>' . esc_html( apply_filters( 'woocommerce_variation_option_name', $option ) ) . '</option>';
    }
}

这段代码没有经过测试,所以我不知道它是否有效。但它应该给你一个正确方向的指针。

 类似资料:
  • [编辑:它实际上是在functions.php中添加代码并省略代码WC文件中的更改时工作的。重要提示:它只在ONE属性存在时起作用。然而,当有2个属性(大小 由于2.0 WooCommerce要么隐藏缺货的产品变体(一个明显的问题,因为客户没有办法知道它们的存在),要么将它们显示为库存变体(也是一个问题,因为客户会系统地失望地发现变体是缺货的-点击购买后的股票)。 该线程包括一个灰色解决方案,以消

  • 我是oAuth2安全系统的新手。关于访问REST资源的基于用户角色的授权,我有一个问题。我的互联网冲浪提供了关于oauth2的身份验证部分的输入。 让我提供给你困扰我的情况。

  • 我想在Wp/WooCommerce /shop/页面上显示所有产品及其变体。(我下面描述的过程是我试图让它工作的过程。欢迎其他选择。 标准是什么:产品A和产品B在网站上展示。产品A有“广告到购物车”按钮。产品B有“选择选项”按钮。 我想要的是:产品A是一种“简单”的产品,在商店页面上显示产品B是一种“可变”产品,有两种组合(黑色/蓝色)。添加到购物车按钮将此变体添加到购物车 我想在商店页面上展示3

  • 我这里有一个场景。 在我设置的WooCommerce商店中,产品类别是父类别,而是它的子类别。这里的父类别名称布朗克斯是销售布朗克斯婴儿用品的城市。 另一个产品类别是父类别,是它的子类别。在这里,父类别名称Newark是销售“Newark婴儿用品”下产品的城市。 布朗克斯的一名顾客正试图购买纽瓦克婴儿用品类别的产品。 我正在尝试在WooCommerce中设置一个自定义运费,它可以根据客户的位置计算

  • 我正在尝试为函数编写一个代码段。php文件,该文件仅显示所选变体的一个价格,因此忽略了在单个产品页面上随变体价格一起显示的价格范围。我正在使用以下代码: 问题是,例如,当您有两个单一产品的变体,而其中一个缺货时,此脚本会在单一产品页面上隐藏剩余变体的价格。我在想,也许每个产品都有一些可用的变体,并使用IF来使用标准的单一产品模板来显示它们。或者你有更好的办法解决这个问题?

  • 因此,在我们的Laravel应用程序中有两个角色(internet客户端和管理员)。下面是DB模式 我们想允许www.site。com/登录路径,仅记录具有“客户端”角色的用户。 请注意,一旦用户登录并强制注销,我们不想检查角色。 谢谢