禁用除" wholesale_customer"

时间:2015-06-28 18:35:57

标签: php wordpress woocommerce e-commerce

好吧,在过去的几天里,我一直想把头发拉出来试图解决这个问题。

我在带有woocommerce的wordpress安装中有一个批发插件。它为用户提供了" wholesale_customer"特价超过其他人。我希望能够只向" wholesale_customer"提供本地送货服务。用户角色,但似乎无法弄清楚如何做到这一点。

我从@mcorkum那里得到了这段代码,但它仍然无效。

/**
 * Add local delivery for wholesale customers
 */
function wholesale_local_delivery($available_methods) {
    global $woocommerce;
    global $current_user;

    $user_roles = $current_user->roles;
    $user_role = array_shift($user_roles);

    if ( isset( $available_methods['local_delivery'] ) ) {
        if ($user_role == 'wholesale_customer' ) {
            unset( $available_methods['local_delivery'] );
        }
    }
    return $available_methods;
}
add_filter( 'woocommerce_package_rates', 'wholesale_local_delivery', 10, 1);

我知道这可以用插件实现,但我不想使用插件或为此付费。

有没有人看到我没有看到的任何内容?

2 个答案:

答案 0 :(得分:2)

/**
 * Add local delivery for wholesale customers
 */
function wholesale_local_delivery($available_methods) {
    global $woocommerce;
    global $current_user;
    if ( isset( $available_methods['local_delivery'] ) ) {
        if ( !current_user_can( 'wholesale_customer' ) ) {
            unset( $available_methods['local_delivery'] );
        }
    }
    return $available_methods;
}
add_filter( 'woocommerce_package_rates', 'wholesale_local_delivery', 10, 1);

通过在主题的functions.php文件中粘贴上述代码来尝试。如果这对您有用,请告诉我。

答案 1 :(得分:1)

我不是wordpress dev,但该代码看起来不像是为用户提供“wholesale_customer”“local_delivery”选项。事实上,如果用户角色是“wholesale_customer”,它看起来是删除本地传递选项:

if ( isset( $available_methods['local_delivery'] ) ) {
    if ($user_role == 'wholesale_customer' ) {
        unset( $available_methods['local_delivery'] );
    }
}

如果我只是简单地将这些代码用于表面值(因为我不是wordpress dev),我会重新编写这个函数,以便更容易理解和阅读:

function wholesale_local_delivery($available_methods)
{
    global $woocommerce;
    global $current_user;

    // Return early if no local delivery option is available
    if (!isset($available_methods['local_delivery'])) {
        return $available_methods;
    }

    // Determine if the user has a user role of wholesale customer
    $hasRoleWholeSaleCustomer = false;
    foreach ($current_user->roles as $role) {
        if ($role === 'wholesale_customer') {
            $hasRoleWholeSaleCustomer = true;
            break;
        }
    }

    // If the user does not have the role wholesale customer
    // And for the code here to be being processed the local delivery
    // option must be available
    if (!$hasRoleWholeSaleCustomer) {
        unset($available_methods['local_delivery']);
    }

    // Return the available methods applicable to the users roles
    return $available_methods;
}

希望有其他有woocomerce经验的人能给出更好的答案。但与此同时,您可以尝试重新编写,看看它是否适合您。

古德勒克。