Php 有人能帮我理解这个变量是在哪里声明的吗?
我试图学习一些更高级的WordPress,我使用并改编了一段代码片段,但无法理解它的一些起源。该代码段用于WooCommerce,并在“免费配送”可用时隐藏其他配送方法 它看起来像是一个循环,使用了一个名为$rates的变量,但我在Woo开发文档中找不到关于这个变量的任何信息。我以为这可能是一个类的实例,但还是找不到任何有用的信息。根据下面的片段,有人能告诉我美元汇率是从哪里来的,它是什么,它将在哪里被宣布Php 有人能帮我理解这个变量是在哪里声明的吗?,php,wordpress,woocommerce,arguments,hook-woocommerce,Php,Wordpress,Woocommerce,Arguments,Hook Woocommerce,我试图学习一些更高级的WordPress,我使用并改编了一段代码片段,但无法理解它的一些起源。该代码段用于WooCommerce,并在“免费配送”可用时隐藏其他配送方法 它看起来像是一个循环,使用了一个名为$rates的变量,但我在Woo开发文档中找不到关于这个变量的任何信息。我以为这可能是一个类的实例,但还是找不到任何有用的信息。根据下面的片段,有人能告诉我美元汇率是从哪里来的,它是什么,它将在哪里被宣布 add_filter( 'woocommerce_package_rates', 'bb
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;
}
}
$rates是通过函数
calculate\u shipping\u for_package()
insidewoocommerce/includes/class wc shipping.php
生成的。您可以在下面的功能中看到过滤器woocommerce\u package\u 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;
}
$rates是通过函数
calculate\u shipping\u for_package()
insidewoocommerce/includes/class wc shipping.php
生成的。您可以在下面的功能中看到过滤器woocommerce\u package\u 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;
}
过滤器挂钩是
WC_Shipping
类的一部分。如果您查看这个钩子的位置,$rates
变量实际上等于$package['rates']
。$package
变量数组存储要发货的包并获取报价…您可以查看,在StackOverFlow中…感谢您花时间回复,这非常有帮助。过滤器挂钩是WC\u Shipping
类的一部分。如果您查看这个钩子的位置,$rates
变量实际上等于$package['rates']
。$package
变量数组存储要发货的包并获取报价…您可以在StackOverFlow中查看…感谢您花时间回复,这非常有用。