Может кто-нибудь помочь мне понять, где объявлена ​​эта переменная? - PullRequest
2 голосов
/ 14 марта 2019

Я пытаюсь изучить более продвинутый WordPress, я использовал и адаптировал фрагмент кода, но не могу понять некоторые его истоки.Фрагмент для WooCommerce и скрывает другие методы доставки, когда доступна «бесплатная доставка».

Это похоже на цикл, использующий переменную с именем $ rate, но я не могу найти ничего в Документах Woo Dev об этой переменной,Я думал, что это может быть экземпляр класса, но опять же не могу найти информацию, которая может помочь.Основываясь на приведенном ниже фрагменте, может кто-нибудь сказать мне, откуда взялись ставки $, что это такое и где это было бы объявлено, пожалуйста?

add_filter( 'woocommerce_package_rates', 'bbloomer_unset_shipping_when_free_is_available_all_zones', 10, 2 );

function bbloomer_unset_shipping_when_free_is_available_all_zones( $rates, $package ) {

    $all_free_rates = array();

        foreach ( $rates as $rate_id => $rate ) {
        if ( 'free_shipping' === $rate->method_id ) {
            $all_free_rates[ $rate_id ] = $rate;
            break;
        }
    }

    if ( empty( $all_free_rates )) {
        return $rates;
        } else {
        return $all_free_rates;
        } 
}

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

$ ставки генерируются из функции calculate_shipping_for_package() внутри woocommerce/includes/class-wc-shipping.php.Вы можете увидеть фильтр woocommerce_package_rates в функции ниже

public function calculate_shipping_for_package( $package = array(), $package_key = 0 ) {
        // If shipping is disabled or the package is invalid, return false.
        if ( ! $this->enabled || empty( $package ) ) {
            return false;
        }

        $package['rates'] = array();

        // If the package is not shippable, e.g. trying to ship to an invalid country, do not calculate rates.
        if ( $this->is_package_shippable( $package ) ) {
            // Check if we need to recalculate shipping for this package.
            $package_to_hash = $package;

            // Remove data objects so hashes are consistent.
            foreach ( $package_to_hash['contents'] as $item_id => $item ) {
                unset( $package_to_hash['contents'][ $item_id ]['data'] );
            }

            $package_hash = 'wc_ship_' . md5( wp_json_encode( $package_to_hash ) . WC_Cache_Helper::get_transient_version( 'shipping' ) );
            $session_key  = 'shipping_for_package_' . $package_key;
            $stored_rates = WC()->session->get( $session_key );

            if ( ! is_array( $stored_rates ) || $package_hash !== $stored_rates['package_hash'] || 'yes' === get_option( 'woocommerce_shipping_debug_mode', 'no' ) ) {
                foreach ( $this->load_shipping_methods( $package ) as $shipping_method ) {
                    if ( ! $shipping_method->supports( 'shipping-zones' ) || $shipping_method->get_instance_id() ) {
                        $package['rates'] = $package['rates'] + $shipping_method->get_rates_for_package( $package ); // + instead of array_merge maintains numeric keys
                    }
                }

                // Filter the calculated rates.
                $package['rates'] = apply_filters( 'woocommerce_package_rates', $package['rates'], $package );

                // Store in session to avoid recalculation.
                WC()->session->set(
                    $session_key, array(
                        'package_hash' => $package_hash,
                        'rates'        => $package['rates'],
                    )
                );
            } else {
                $package['rates'] = $stored_rates['rates'];
            }
        }
        return $package;
    }
0 голосов
/ 14 марта 2019

Крючок фильтра woocommerce_package_rates является частью класса WC_Shipping. Если вы посмотрите на исходный код , где расположен этот хук, переменная $rates фактически равна $package['rates']:

$package['rates'] = apply_filters( 'woocommerce_package_rates', $package['rates'], $package );

Массив переменных $package Хранит пакеты для отправки и получения кавычек.

Вы можете взглянуть на список вопросов / ответов, которые используют этот хук в StackOverFlow, чтобы лучше понять его использование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...