#php #wordpress #woocommerce #parameters #hook-woocommerce
#php #wordpress #woocommerce #параметры #подключение-woocommerce
Вопрос:
В документации Woocommerce предполагается, что перехват woocommerce_get_price_html
фильтра, расположенный в get_price_html()
методе, принимает обратный вызов, который принимает до двух параметров, цены и продукта.
Но когда я пытаюсь получить доступ к продукту, я получаю NULL
вместо объекта WC_Product.
Вот мой тестовый код:
add_filter( 'woocommerce_get_price_html', function( $price, $item ) {
echo var_dump ($item); // NULL
return $price;
});
Я что-то упускаю?
Комментарии:
1. Это просто не укладывается у меня в голове, но разве add_filter не принимает параметр, указывающий, сколько параметров принимает обратный вызов?
2. @Chipster почему да, это так! И этот параметр по умолчанию равен 1, что объясняет, почему я получал NULL для своего второго параметра. Спасибо!
Ответ №1:
Вам нужно объявить 2 параметра, которые вы используете для этого подключения, в вашей подключенной функции, сразу после приоритета подключения, таким образом:
add_filter( 'woocommerce_get_price_html', function( $price, $product ) {
echo var_dump ($product); // The WC_Product object instance
return $price;
}, 10, 2 );
И лучше назвать вашу функцию, например:
add_filter( 'woocommerce_get_price_html', 'filter_woocommerce_get_price_html', 10, 2 );
function filter_woocommerce_get_price_html( $price, $product ) {
echo var_dump ($product); // The WC_Product object instance
return $price;
}
На этот раз вы должны быть в состоянии получить переменную $product
object…
Смотрите документацию для функций add_action() и add_filter() WordPress.
Комментарии:
1. Спасибо! Почему лучше дать имя вашей функции, а не создавать анонимную?
2. @SamRitter Потому что это позволяет установить читаемую и полезную ссылку для подключенной функции, которую можно использовать в дальнейшем (позже). Это хорошая привычка, такая же, как комментирование, форматирование вашего кода или добавление понятных имен переменных… Также, если вам нужно повторно использовать перехват и вы снова используете анонимную функцию, вы получите сообщение об ошибке.