如何解决根据URL变量启用或禁用WooCommerce产品销售价格
我正在尝试通过以下链接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',2 );
解决方法
您需要将此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',2 );
add_filter( 'woocommerce_product_variation_get_price',2 );
add_filter( 'woocommerce_product_variation_get_sale_price',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文件中。经过测试,可以正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。