这与使用 Woocommerce 的 Wordpress 网站相关。 我的服务器错误日志记录了访问特定页面的每个 IP 的此错误:
Error: PHP Warning: Missing argument 2 for elixa_woo_hide_in_loop() in "filepath"/functions.php on line 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
这是上面引用的钩子(Hook):
http://woocommerce.wp-a2z.org/oik_hook/woocommerce_product_is_visible/
上面的代码会影响 Woocommerce“浏览所有产品”页面,其中taxonomy-product_cat.php 按类别显示所有产品。
此代码是由我之前的开发人员自定义编写的,不是 Wordpress 或 Woocommerce 框架的一部分。
我一生都无法理解这对于循环应该做什么。奇怪的是,当我删除 add_filter 时,它对产品显示的影响为零,并且错误消失了。
当对所有这些查询进行测试 $id = NULL 或 0 时,我找不到这个通用变量最初声明的位置:
打印 gettype($id);
打印 get_object_vars($id);
打印 is_array($id);
打印 is_object($id);
print_r($id);
打印计数($id);
打印 get_class($id);
打印 isset($id);
打印 get_parent_class($id);
打印 gettype($id->container);
只是想联系社区,看看他们是否看到过类似的情况。这是 sanitizer 功能吗?它有什么作用?
最佳答案
您在注册过滤器时出错。第三个参数是优先级,而不是参数数量。请参阅https://developer.wordpress.org/reference/functions/add_filter/
将代码更改为:
add_filter( 'woocommerce_product_is_visible', 'elixa_woo_hide_in_loop', 10, 2 );
关于php - Functions.php 中的自定义函数缺少参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42964307/