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

时间:2017-03-22 23:06:58

标签: php mysql wordpress hook-woocommerce

这与使用Woocommerce的Wordpress网站有关。 我的服务器错误日志记录访问某个页面的每个IP的错误:

  

错误:PHP警告:elixa_woo_hide_in_loop()缺少参数2   在第239行" filepath" /functions.php

以下是代码:

/*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);
打印计数($ id);
print get_class($ id);
print isset($ id);
print get_parent_class($ id);
print gettype($ id-> container);

只想与社区联系,看看他们是否看到过类似的内容。这是消毒功能吗?它做了什么?

1 个答案:

答案 0 :(得分:0)

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

将您的代码更改为:

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