Отсутствует аргумент в пользовательской функции в functions.php

Это связано с веб-сайтом Wordpress, использующим Woocommerce. Журналы ошибок моего сервера регистрируют эту ошибку для каждого IP-адреса, который посещает определенную страницу:

Ошибка: Предупреждение PHP: отсутствует аргумент 2 для elixa_woo_hide_in_loop() в «filepath»/functions.php в строке 239.

Вот код:

/*Within functions.php*/

add_filter( 'woocommerce_product_is_visible', 'elixa_woo_hide_in_loop', 2 );

function elixa_woo_hide_in_loop( $visible, $id ) {
echo "$id outside of if";
if ( $visible && get_field ( '_elixa_hide_cat', $id ) ) {
    echo "$id in if";
    return false;
    }
return $visible;
}

/*Within website, displayed above each product*/

Warning: Missing argument 2 for elixa_woo_hide_in_loop() in "filepath"/functions.php on line 239

outside of if

Вот хук, упомянутый выше:

http://woocommerce.wp-a2z.org/oik_hook/woocommerce_product_is_visible/

Приведенный выше код влияет на страницу Woocommerce «Просмотреть все продукты», где taxonomy-product_cat.php отображает все продукты по категориям.

Этот код был специально написан разработчиком до меня и не является частью платформы Wordpress или Woocommerce.

Я не могу понять, что это должно делать для цикла. Как ни странно, когда я удаляю add_filter, он никак не влияет на отображение товара и ошибки исчезают.

При тестировании $id = NULL или 0 для всех этих запросов, и я не могу найти, где изначально объявляется эта общая переменная:

print gettype($id);
print get_object_vars($id);
print is_array($id);
print is_object($id);
print_r($id);
print count($id);
print get_class($id);
print isset($id);
print get_parent_class($id);
print gettype($id->container);

Просто хочу обратиться к сообществу и посмотреть, видели ли они что-то подобное. Это санитарная функция? Что оно делает?


person Jakob Smith    schedule 22.03.2017    source источник


Ответы (1)


У вас ошибка при регистрации фильтра. Третий параметр — это приоритет, а не количество аргументов. См. https://developer.wordpress.org/reference/functions/add_filter/.

Измените свой код на:

add_filter( 'woocommerce_product_is_visible', 'elixa_woo_hide_in_loop', 10, 2 );
person fubar    schedule 22.03.2017