在不影响性能的情况下有计划地更改WooCommerce产品和变体价格

时间:2020-12-09 作者:Kristián Filo

我需要为我商店中所有登录的客户设置全球5%的折扣(或0.95的利润率)。我使用过滤器来改变所有简单产品和产品变体的价格。为了让它正常工作,我需要为登录用户删除每个产品的产品瞬态。

这很好,但加载时间太长。这对性能的影响似乎很大。

代码如下:

function change_price_for_logged_in_customers($price, $product, $clear_transients) {
    if ( is_user_logged_in() && is_numeric($price) ) {

        // Clear WC transients for variations
        if($clear_transients) {
            wc_delete_product_transients($product->get_id());
        }

        // Apply 5% discount, round up discounted price to 1 decimal
        $logged_in_price = $price*0.95;
        $logged_in_price = number_format((float)$logged_in_price, 1, \'.\', \'\');

        return $logged_in_price;
    }
    return $price;
}

function logged_in_discount_filter($price, $product) {
    return change_price_for_logged_in_customers($price, $product, 0);
}
add_filter(\'woocommerce_product_get_price\', \'logged_in_discount_filter\', 10, 2);

function custom_price( $price, $product ) {
    return change_price_for_logged_in_customers($price, $product, 1);
}
add_filter(\'woocommerce_product_variation_get_price\', \'custom_price\' , 99, 2 );

function custom_variation_price( $price, $variation, $product ) {
    return change_price_for_logged_in_customers($price, $product, 1);
}
add_filter(\'woocommerce_variation_prices_price\', \'custom_variation_price\', 99, 3 );
有没有办法更有效地做到这一点?

非常感谢。

1 个回复
SO网友:Przemo420

https://woocommerce.wp-a2z.org/oik_api/wc_delete_product_transients/

您只需清除1个瞬态:

delete_transient( \'wc_var_prices_\'. $product->get_id() );

相关推荐

Set Transient expiration

我有一个页面,每天显示一篇随机的帖子。为了每24小时更换一次岗位,我使用set_transient(\'totd_trans_post_id\', $totd[0]->ID, (60*60*24)); 我想知道的是:插入并保存代码后,是否立即开始倒计时(60*60*24)</如果是:如果让代码运行23个小时,然后决定“更新”代码,会发生什么。倒计时会重新开始吗</如果48小时内没有人访问该网站,是否仍会过期?还是有人必须在24小时后访问才能“运行”它