更好,更短的PHP代码解决方案(wordpress,woocommerce)

时间:2018-08-08 12:09:46

标签: php wordpress woocommerce

我写了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' );
}

1 个答案:

答案 0 :(得分:1)

第一次尝试做得好!但是,您是对的-您可以做得更好!

首先,您不需要3个$*_link变量,因为WooCommerce具有两个条件-is_shop()is_cart()来检查您是在商店页面还是购物车页面。另外,, $shop_link中的, $cart_linksetcookie不是必需的,因此您可以放心地删除它们。

第二,您不需要定义函数sp_custom_notice()两次,也不需要在if语句中定义它-仅在if之外一次。您也不应该两次add_action()

最后,将cookie和页面检查放置在函数内部。

我个人认为,最好的学习方法就是边做边做,因此,我不会向您展示正确的代码,但是,如果您遵循以上建议,则应该可以自己解决—做到这一点。显然,您显然对此有所了解!

不过,为了让您有一个良好的开端,您的整个代码块都应以

开头
function sp_custom_notice() {

并以

结尾
}

add_filter( 'woocommerce_init', 'sp_custom_notice' );

函数中包含的所有内容。

希望有帮助。如果遇到问题,请随时使用新代码更新您的问题,我们将很乐意为您提供帮助。