根据URL变量启用或禁用WooCommerce产品销售价格

时间:2020-10-14 16:20:59

标签: php wordpress woocommerce price urlvariables

我正在尝试通过以下链接www.example.com?sale向进入网站的用户显示销售价格,并向其他用户显示正常价格。下面的代码完成了单个产品的工作,仅向具有此URL www.example.com?sale的用户显示销售价格,但是在汽车上,其切换回常规价格。并且仅适用于单个产品。我是woocommerce和php的新手,希望有人可以帮我这个忙。非常感谢您的帮助!

function custom_wc_get_sale_price( $sale_price, $product ) {
    if (isset($_GET['sale'])) {
        return $sale_price;
} else {
        return $product->get_regular_price();
}

}
add_filter( 'woocommerce_product_get_sale_price', 'custom_wc_get_sale_price', 50, 2 );
add_filter( 'woocommerce_product_get_price', 'custom_wc_get_sale_price', 50, 2 );

1 个答案:

答案 0 :(得分:1)

您需要将此url变量设置为WC会话,以避免在更改网址时丢失该变量:

// Early enable guest customer WC_Session
add_action( 'init', 'wc_session_enabler' );
function wc_session_enabler() {
    if ( is_user_logged_in() || is_admin() )
        return;

    if ( isset(WC()->session) && ! WC()->session->has_session() ) {
        WC()->session->set_customer_session_cookie( true );
    }
}

// Get "sale" url variable and set custom WC session variable
add_action( 'init', 'enable_sale_to_wc_session' );
function enable_sale_to_wc_session() {
    if ( isset($_GET['sale']) ) {
        WC()->session->set('has_sale', '1');
    }
}

// Enable sale price if it's set on products when 'sale' is as an URL variable
add_filter( 'woocommerce_product_get_price', 'enabling_sale_price', 1000, 2 );
add_filter( 'woocommerce_product_get_sale_price', 'enabling_sale_price', 1000, 2 );
add_filter( 'woocommerce_product_variation_get_price', 'enabling_sale_price', 1000, 2 );
add_filter( 'woocommerce_product_variation_get_sale_price', 'enabling_sale_price', 1000, 2 );
function enabling_sale_price( $price, $product ) {
    if ( isset($_GET['sale']) || WC()->session->get('has_sale') ) {
        return $price;
    } else {
        return $product->get_regular_price();
    }
}

// Remove custom WC session variable on thankyou page
add_action( 'woocommerce_thankyou', 'remove_enable_sale_from_wc_session' );
function remove_enable_sale_from_wc_session() {
    if ( WC()->session->get('has_sale') ) {
        WC()->session->__unset('has_sale');
    }
}

代码进入活动子主题(或活动主题)的functions.php文件中。经过测试,可以正常工作。