functions.php 中的自定义函数中缺少参数

Missing argument within custom function in functions.php

这与使用 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

这是上面引用的钩子:

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

上面的代码影响了一个 Woocommerce "Browse all products" 页面,其中 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->容器);

只是想接触社区,看看他们是否看到过类似的东西。这是消毒功能吗?它有什么作用?

您在注册过滤器时出错。第三个参数是优先级,而不是参数数量。参见 https://developer.wordpress.org/reference/functions/add_filter/

将您的代码更改为:

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