长话短说。我想为 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 中:)
只需使用针对后端的 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;
}
它应该按预期工作。