我在我的插件里有一些这样的过滤器

add_filter('woocommerce_product_get_price', 'custom_price', 99, 2 );
add_filter('woocommerce_product_get_regular_price', 'custom_price', 99, 2 );
add_filter('woocommerce_product_get_sale_price', 'custom_price', 99, 2 );
add_filter('woocommerce_variation_prices_price', 'custom_variable_price', 99, 3 );
add_filter('woocommerce_variation_prices_regular_price', 'custom_variable_price', 99, 3 );
add_filter('woocommerce_variation_prices_sale_price', 'custom_variable_price', 99, 3 );
... and so on
function custom_variable_price( $price, $variation, $product ) {
    
    if((!is_admin() && !wp_doing_ajax()) && (is_shop() || is_product_category() || is_product_tag() || is_product() || is_front_page())) {

        return get_discounted_price($product, $price);

    }

    return $price;

}

这在任何地方都可以动态改变我的价格,即使是woocommerce原生产品的短代码(通过页面编辑器),除了在函数中的do_shortcode中调用它.却不知道为什么.

下面是这些过滤器不起作用的例子

add_action('woocommerce_after_cart', 'offer_additional_products_cart');
function offer_additional_products_cart() {
    
    if(is_cart()) {
        
        echo '
        <div class="company_home_title">'.__('Do not miss', 'company_translations').'</div>
        ';
        
        echo do_shortcode('[products limit="4" orderby="popularity" class="quick-sale" on_sale="true"]');
        
    }
    
} 

推荐答案

这是完全正常的,因为您使用的是do_shortcode() in cart page和您的自定义价格is not allowed in cart page (see your restrictions in your 101 statement).

要在购物车页面中允许您的自定义产品价格,您应该在IF语句中添加is_cart(),然后do_shortcode()将按预期工作,显示正确的自定义产品价格.

但是你最好在函数中的IF语句中只使用! is_admin(),比如:

function custom_price( $price, $product ) {
    if ( ! is_admin() ) {
        $price = get_discounted_price($product, $price);
    }
    return $price;
}

因为与您当前的代码,价格不会得到改变购物车和结帐页面.

Php相关问答推荐

在不刷新页面的情况下无法使用JQuery更新id

PHP在将数组子集赋给变量时是否复制数组子集?

PHP Array to Powershell exec命令Args

如何使用属性#[Embedded]嵌入带有规则的对象集合?

从产品中获取WooCommerce产品属性单选按钮的列表WP_Query

具有重叠捕获组的PHP正则表达式

PHP中的圆生成器在国际日期变更线上失败

WHERE方法不能与有效查询Laravel一起使用

PHP Laravel Web应用启动时间&>15秒

移动应用:在PHP中忽略Cookie?

限制某些产品只能在WooCommerce的特定邮政编码/邮政编码范围内发货

可以';exec、system和shell_exec PHP函数中的命令字符串上的字符数不得超过8175

PHP 支持 APNG 文件吗?

服务器升级到新的mysql版本8.0.34后查询错误

致命错误:未捕获 Google_Exception:客户端机密 JSON 文件无效.在 /somepath/lib/vendor/google/apiclient/src/Google/Client.php

如何在 PHP 中对具有相同数组值的值求和

如何在 php 中获取正确的时间

PHP - 计算非数值数组

在wordpress注销后防止后退操作

计算组合指数