我写了PHP代码(我试图显示woocommerce通知-免费送货,价格为$ 40,并且只能在商店页面上一次,在购物车页面上一次,但在购物车中的运费不应超过40 $),该代码有效,但是我不确定这是最好的方法:
$actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$shop_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") ."://$_SERVER[HTTP_HOST]/shop/";
$cart_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") ."://$_SERVER[HTTP_HOST]/cart/";
$first_time_shop = false;
if ((!isset($_COOKIE["mynoticeshop"]))&&($actual_link == $shop_link))
{
$first_time_shop = true;<br>
setcookie("mynoticeshop", "mynoticesaleshop", time() + 600, $shop_link);
}
if ($first_time_shop) {
function sp_custom_notice() {
$subtotal = WC()->cart->subtotal;
$free_shipping_threshold = 40;
if ($subtotal < $free_shipping_threshold) {
wc_add_notice( 'free shipping for $40 & under', 'notice' );
}
}
add_filter( 'woocommerce_init', 'sp_custom_notice' );
}
$first_time_cart = false;
if ((!isset($_COOKIE["mynoticecart"]))&&($actual_link == $cart_link)) {
$first_time_cart = true;
setcookie("mynoticecart", "mynoticesalecart", time() + 600, $cart_link);
}
if ($first_time_cart) {
function sp_custom_notice() {
$subtotal = WC()->cart->subtotal;
$free_shipping_threshold = 40;
if ($subtotal < $free_shipping_threshold) {
wc_add_notice( ' free shipping for $40 & under', 'notice' );
}
}
add_filter( 'woocommerce_init', 'sp_custom_notice' );
}
我是编程的新手,是否对这种代码有更好更好的解决方案感兴趣?
-------------- UPDATE -------------
$actual_link = "$_SERVER[REQUEST_URI]";
const FREE_SHIPPING_CONSTANT = 40;
function sp_custom_notice(){
$subtotal = WC()->cart->subtotal;
if ($subtotal < FREE_SHIPPING_CONSTANT) {
wc_add_notice( 'free shipping for $40 & under', 'notice' );
}
};
$first_time_shop = false;
$first_time_cart = false;
if ((!isset($_COOKIE["mynoticeshop"]))&&($actual_link == '/shop/')) {
$first_time_shop = true;
setcookie("mynoticeshop", "mynoticesaleshop", time() + 600);
}
if ((!isset($_COOKIE["mynoticecart"]))&&($actual_link == '/cart/')) {
$first_time_cart = true;
setcookie("mynoticecart", "mynoticesalecart", time() + 600);
}
if (($first_time_shop)||($first_time_cart)){
sp_custom_notice();
add_action( 'woocommerce_init', 'sp_custom_notice' );
}
答案 0 :(得分:1)
第一次尝试做得好!但是,您是对的-您可以做得更好!
首先,您不需要3个$*_link
变量,因为WooCommerce具有两个条件-is_shop()
和is_cart()
来检查您是在商店页面还是购物车页面。另外,, $shop_link
中的, $cart_link
和setcookie
不是必需的,因此您可以放心地删除它们。
第二,您不需要定义函数sp_custom_notice()
两次,也不需要在if语句中定义它-仅在if之外一次。您也不应该两次add_action()
。
最后,将cookie和页面检查放置在函数内部。
我个人认为,最好的学习方法就是边做边做,因此,我不会向您展示正确的代码,但是,如果您遵循以上建议,则应该可以自己解决—做到这一点。显然,您显然对此有所了解!
不过,为了让您有一个良好的开端,您的整个代码块都应以
开头function sp_custom_notice() {
并以
结尾}
add_filter( 'woocommerce_init', 'sp_custom_notice' );
函数中包含的所有内容。
希望有帮助。如果遇到问题,请随时使用新代码更新您的问题,我们将很乐意为您提供帮助。