Второй параметр подключенной функции Woocommerce возвращает NULL вместо объекта

#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 Потому что это позволяет установить читаемую и полезную ссылку для подключенной функции, которую можно использовать в дальнейшем (позже). Это хорошая привычка, такая же, как комментирование, форматирование вашего кода или добавление понятных имен переменных… Также, если вам нужно повторно использовать перехват и вы снова используете анонимную функцию, вы получите сообщение об ошибке.

Ответ №2:

введите описание изображения здесь

Есть 3 места, где этот фильтр подключен. Три из них имеют два параметра.

Попробуйте этот способ, если хотя

 add_filter( 'woocommerce_get_price_html', 'alter_price', 10, 2 );

function alter_price( $price, $item ) {
    echo var_dump ($item); 
    return $price;
}