#php #wordpress #woocommerce
Вопрос:
Я пытаюсь скрыть методы доставки, основанные на доступности других методов доставки (по их идентификаторам), для несколько сложной настройки доставки.
Основываясь на других фрагментах кода, которые я нашел (для других случаев использования, исключая штаты или показывая только бесплатную доставку, если она доступна), я придумал это:
function hide_duplicate_shipping_methods ( $rates ) { foreach ( $rates as $rate_id =gt; $rate ) { if ( 'flat_rate:10' === $rate-gt;method_id ) { unset( $rates['flat_rate:28'] ); } } return $rates; } add_filter( 'woocommerce_package_rates', 'hide_duplicate_shipping_methods', 100 );
Однако это ничего не скрывает, и я действительно не могу найти или придумать что-нибудь еще.
Есть какие-нибудь советы?
Ответ №1:
$rate-gt;method_id
будет равноlocal_pickup
,free_shipping
,flat_rate
, и т.д..- в то время
$rate_id
как будет равноlocal_pickup:1
,free_shipping:2
, и т.д..
Так что либо вы используете его вот так:
function filter_woocommerce_package_rates( $rates, $package ) { // Loop trough foreach ( $rates as $rate_id =gt; $rate ) { // Checks if a value exists in an array, multiple can be added, separated by a comma if ( in_array( $rate-gt;method_id, array( 'local_pickup', 'free_shipping' ) ) ) { unset( $rates['flat_rate:28'] ); } } return $rates; } add_filter( 'woocommerce_package_rates', 'filter_woocommerce_package_rates', 10, 2 );
ИЛИ вот так:
function filter_woocommerce_package_rates( $rates, $package ) { // Loop trough foreach ( $rates as $rate_id =gt; $rate ) { // Checks if a value exists in an array, multiple can be added, separated by a comma if ( in_array( $rate_id, array( 'local_pickup:1', 'free_shipping:2' ) ) ) { unset( $rates['flat_rate:28'] ); } } return $rates; } add_filter( 'woocommerce_package_rates', 'filter_woocommerce_package_rates', 10, 2 );
Код помещается в functions.php
файл активной дочерней темы (или активной темы). Протестировано и работает в WordPress 5.8.1 и WooCommerce 5.8.0
Не забудьте очистить корзину, чтобы обновить кэшированные данные о доставке.