Woocommerce 仅在前端为登录用户提供价格折扣

问题描述 投票:0回答:1

长话短说。我想为 WooCommerce 商店中的登录用户添加 3% 的折扣。执行此操作的代码如下所示:

<?php
add_filter( 'woocommerce_product_get_price', 'products_custom_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_price', 'products_custom_price', 10, 2 );
add_filter( 'woocommerce_product_get_regular_price', 'products_custom_price', 10, 2 );
// add_filter( 'woocommerce_product_get_sale_price', 'products_custom_price', 10, 2 );
function products_custom_price( $price, $product ){
    if (!is_user_logged_in())
        return $price;
    
    $discount = $price * 0.03;
    
    return $price - $discount;
}

它有效,但它也适用于管理面板,因为根据我目前对 WP 的理解,“钩子”的工作原理类似于我正在修改的全局单例 getter。用蹩脚的话来说,现在管理员必须创建折扣价格的产品而不是普通产品,这是不可取的。

我想从这种情况中排除“设置层”(又名管理面板),但不是管理员用户。因此将条件修改为如下所示:

if (!is_user_logged_in() || current_user_can( 'manage_options' ) )

这不是我想要的最终解决方案。让管理员角色看到折扣价格,只是不在 wp-admin 中:)

php wordpress woocommerce product price
1个回答
0
投票

只需使用针对后端的 WordPress 条件函数

is_admin()
(但不是管理员用户):

add_filter( 'woocommerce_product_get_price', 'products_custom_price', 10, 2 ); add_filter( 'woocommerce_product_variation_get_price', 'products_custom_price', 10, 2 ); add_filter( 'woocommerce_product_get_regular_price', 'products_custom_price', 10, 2 ); // add_filter( 'woocommerce_product_get_sale_price', 'products_custom_price', 10, 2 ); function products_custom_price( $price, $product ){ if ( is_user_logged_in() && ! is_admin() ) { return $price * 0.03; } return $price; }
它应该按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.