使用钩子和过滤器基于常规价格更新WooCoomerce销售价格

时间:2018-06-05 02:25:02

标签: php wordpress woocommerce

我需要帮助强制更新我的产品sale_price,使其比普通价格低65%。

我需要这个实际更改,因此显示挂钩不会工作,因为我使用插件,插件从数据库中的_sale_price列获取数据变化。

如截图所示: Screenshots

我使用了这段代码:

/**
 * FORCE EDIT SALES PRICE
 */

// Generating dynamically the product "regular price"
add_filter( 'woocommerce_product_get_regular_price', 'custom_dynamic_regular_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_regular_price', 'custom_dynamic_regular_price', 10, 2 );
function custom_dynamic_regular_price( $regular_price, $product ) {
    wc_delete_product_transients($product->get_id());

    if( empty($regular_price) || $regular_price == 0 )
        return $product->get_price();
    else
        return $regular_price;
}


// Generating dynamically the product "sale price"
add_filter( 'woocommerce_product_get_sale_price', 'custom_dynamic_sale_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_sale_price', 'custom_dynamic_sale_price', 10, 2 );
function custom_dynamic_sale_price( $sale_price, $product, $variation ) {
    $discount = 0.35;
    if( $sale_price != 0 )
        return $product->get_regular_price() * $discount;
    else
        return $product->get_regular_price();
};

// Displayed formatted regular price + sale price
add_filter( 'woocommerce_get_price_html', 'custom_dynamic_sale_price_html', 20, 2 );
function custom_dynamic_sale_price_html( $price_html, $product ) {
    if( $product->is_type('variable') ) return $price_html;

    $price_html = wc_format_sale_price( wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price() ) ), wc_get_price_to_display(  $product, array( 'price' => $product->get_sale_price() ) ) ) . $product->get_price_suffix();

    return $price_html;
}

// pass it on to cart
add_action('woocommerce_before_calculate_totals','set_cart_item_sale_price',10, 1);

function set_cart_item_sale_price ($cart) {
    if (is_admin() && !defined('DOING_AJAX') )
        return;

    foreach($cart->get_cart() as $cart_item) {
        $price = $cart_item['data'] -> get_sale_price();
        $cart_item['data'] -> set_price($price);
    }
}

该代码来自此处:

Set product sale price programmatically in WooCommerce 3

Wrong Woocommerce cart item price after setting programmatically product sale price

通过这样做我网站上的价格, Website Screenshots

顶部和底部的价格仍然是50%的折扣,而底部的价格是正确的。

我希望我的解释足够清楚。 请原谅英语不好。

谢谢。

0 个答案:

没有答案