长话短说.我想为在WooCommercestore 登录的用户增加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;
}

它的工作,但它也适用于管理面板,因为作为我目前的理解可湿性粉剂,"钩子"的工作类似于全局单一获取程序,我正在修改.在蹩脚的条件下,现在的管理员不得不创建折扣价格的产品,而不是常规的产品,这是不受欢迎的.

我想排除"设置层",也就是管理面板从这个条件,但不是一个管理用户.因此,将条件修改为如下所示:

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

并不是我所希望的最终解决方案.让管理员角色查看折扣价格,但不是在wp-admin:)

推荐答案

只需使用以后端(but not administrator users)为目标的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;
}

它应该会像预期的那样工作.

Php相关问答推荐

无法使用PHP DomDocument找到IMG元素

try 修改这个PHP代码如果语句在WordPress""

PHP FFI—Convert void * to int

获得客户S在WooCommerce为期1年的总支出

如何优化-PHP 7.3.14+Laravel 6

允许在WooCommerce管理员优惠券列表中显示自定义优惠券类型

将数组推送到数组时,数组推送()出现问题

我必须对所有的SQL查询使用预准备语句吗?

如何从Laravel中的Spatie\Dns\Records\A对象中提取IP地址

上传WordPress模板中的翻译文件(.mo和.po)

htaccess重命名index.php以在URL中显示为SEO的友好名称

使用简码在 WooCommerce 我的帐户中显示一些用户数据

Mac 上安装 php 时出现 Homebrew 错误

PHP 中使用 JSON 的自定义会话处理程序会因错误而 destruct 会话

为WooCommerce中的运输方式ID设置必填的 checkout 订单备注字段

.htaccess环境变量条件不被判断

Laravel Websockets 错误:(WebSocket 在建立连接之前关闭)

复杂的mysql查询问题

PHP - 如何获取发送到脚本的查询参数

升级到 PHP 8.2:ksort 和 krsort 更改