全局变量、add_filter和add_action(WooCommerce/WordPress)

Global variable, add_filter and add_action (WooCommerce/ WordPress)

提问人:Michal 提问时间:11/2/2023 最后编辑:Michal 更新时间:11/2/2023 访问量:30

问:

有人可以告诉我为什么在函数“businessbloomer_hide_free_shipping_for_shipping_class()”中设置为 1 的变量 $czypokazywacpopupkoszykowy 在“函数 wyswietl_popup_koszyka_i_kasy()”中没有值 1?它仍然值 0,在第一行代码中设置。

<?php
global czypokazywacpopupkoszykowy;
$czypokazywacpopupkoszykowy = 0;

add_action( 'wp_enqueue_scripts', 'porto_child_css', 1001 );

// Load CSS
function porto_child_css() {
    // porto child theme styles
    wp_deregister_style( 'styles-child' );
    wp_register_style( 'styles-child', esc_url( get_stylesheet_directory_uri() ) . '/style.css' );
    wp_enqueue_style( 'styles-child' );

    if ( is_rtl() ) {
        wp_deregister_style( 'styles-child-rtl' );
        wp_register_style( 'styles-child-rtl', esc_url( get_stylesheet_directory_uri() ) . '/style_rtl.css' );
        wp_enqueue_style( 'styles-child-rtl' );
    }
}

add_filter( 'woocommerce_package_rates', 'businessbloomer_hide_free_shipping_for_shipping_class', -12, 2 );
function businessbloomer_hide_free_shipping_for_shipping_class( $rates, $package ) {
global $czypokazywacpopupkoszykowy;
    $shipping_class_target = 30;           // ID OF MY SHIPPING_CLASS
    $in_cart = false;
    foreach( WC()->cart->cart_contents as $key => $values ) {
        if( $values[ 'data' ]->get_shipping_class_id() == $shipping_class_target ) {
            $in_cart = true;
            break;
        } 
    }
    if( $in_cart ) {
        unset( $rates['inpost_paczkomaty:11'] );     //VALUE:ID OF MY SHIPPING METHOD
        $czypokazywacpopupkoszykowy = 1;
    }
    return $rates;

}

add_action('wp_footer', 'wyswietl_popup_koszyka_i_kasy',9999);
function wyswietl_popup_koszyka_i_kasy() {

// Pobierz zmienną $czypokazywacpopupkoszykowy korzystając z filtra
global $czypokazywacpopupkoszykowy;

echo "zzz" .     $czypokazywacpopupkoszykowy;

     if ((is_cart() && $czypokazywacpopupkoszykowy == 1) || (is_checkout()) && $czypokazywacpopupkoszykowy == 1) { // Wyświetlamy popup na stronie koszyka i kasy

            $show_popup = true;

        if (isset($_COOKIE['popup_closed']) && $_COOKIE['popup_closed'] == 'true') {
            $show_popup = false;
        }

        if ($show_popup) {
            ?>
            <div id="custom-cart-popup" class="cart-popup">
                <div class="popup-content">
                    <p>W koszyku znajduje się co najmniej jeden produkt, który można odebrać jedynie osobiście. Jeśli chcesz złożyć zamówienie z opcją wysyłki pozostaw w koszyku jedynie produkty, które podlegają wysyłce.</p>
                    <a href="#" id="close-popup" class="close-popup">Zamknij</a>
                </div>
            </div>

            <style>
                /* Stylizacja popupa */
                .cart-popup {
                    display: none;
                    position: fixed;
                    top: 0;
                    left: 0;
                    width: 100%;
                    height: 100%;
                    background: rgba(0, 0, 0, 0.8);
                    z-index: 999;
                }

                .popup-content {
                    position: absolute;
                    top: 50%;
                    left: 50%;
                    transform: translate(-50%, -50%);
                    background: #fff;
                    padding: 20px;

                    box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
                    text-align: center;
                }

                .close-popup {
                    display: inline-block;
                    margin-top: 10px;
                    padding: 10px 20px;
                    background: #000000;
                    color: #ffffff;
                    text-decoration: none;

                }
            </style>

            <script type="text/javascript">
                jQuery(document).ready(function($) {
                    // Wyświetlanie popupa na stronie koszyka i kasy po 60 sekundach
                    setTimeout(function() {
                        $('#custom-cart-popup').fadeIn();
                    }, 1000);

                    // Obsługa zamknięcia popupu
                    $('#close-popup').on('click', function(e) {
                        e.preventDefault();
                        $('#custom-cart-popup').fadeOut();
                        // Ustawiamy ciasteczko, aby nie wyświetlać popupa ponownie przez 60 sekund
                        document.cookie = 'popup_closed=true; expires=' + new Date(new Date().getTime() + 120000).toUTCString() + '; path=/';
                    });
                });
            </script>
            <?php
        }
    }
}
  1. 将变量写入会话的方法
  2. 保存和读取变量的方法“变通办法”
变量 woocommerce

评论


答:

0赞 Eriks Klotins 11/2/2023 #1

因为你需要在函数中说它需要访问全局变量:

function businessbloomer_hide_free_shipping_for_shipping_class( $rates, $package ) {
    global czypokazywacpopupkoszykowy;

    ...

在 PHP 函数中访问全局变量

评论

0赞 Michal 11/2/2023
我错误地粘贴了旧版本的代码。在新的变量中,此变量设置为全局,但仍然不起作用。