【问题标题】:Warning: array_filter() expects parameter 1 to be array警告:array_filter() 期望参数 1 是数组
【发布时间】:2020-06-17 12:52:24
【问题描述】:

您好,我在我的网站上遇到了问题。以下 PHP 代码 sn-p 出现在我的层后面显示的前端网站上。我不是编码员,但如有必要,我可以对 php 进行更改。请问有人可以帮忙吗?

警告信息:

警告:array_filter() 期望参数 1 是数组,给定的布尔值 /home/gordonfrasier/public_html/wp-content/plugins/divi-overlays/divi-overlays.php 第2617行

代码: }

            if ( $display_in_posts == 'all' ) {

                $display_in_current = true;
**Line 2617 ------------->** $except_in_posts = array_filter( get_post_meta( $overlay_id, 'do_at_pagesexception_selected' ) );

                if ( isset ( $except_in_posts[0] ) ) {

                    foreach( $except_in_posts[0] as $in_post => $the_id ) {

                        if ( $the_id == $current_post_id ) {

                            $display_in_current = false;

                            break;
                        }
                    }
                }
            }

【问题讨论】:

  • 我们需要看看get_post_meta函数
  • 错误告诉你,你给 array_filter 的第一个参数不是一个数组,当它需要的时候。所以大概get_post_meta 函数不会返回一个数组。大概它返回一个布尔值(即真或假),因为这也是错误告诉你的。但是您没有向我们展示该函数(甚至它的输出),因此我们无法确定如何修复它。
  • @iJamesPHP2 我很确定这是一个 WordPress 函数。
  • @ADyson 我很确定这是一个 WordPress 功能,而不是他写的东西。
  • @iJames Hi James 很抱歉,是的,它是带有主题编辑器 Divi 的 WordPress 功能

标签: php arrays boolean warnings


【解决方案1】:

WordPress get_post_meta() 函数可能会返回单个值。

要解决此问题,您可以这样做以替换有故障的线路:

$postMeta = get_post_meta( $overlay_id, 'do_at_pagesexception_selected');
$except_in_posts = is_array($postMeta) ? array_filter($postMeta) : [$postMeta];

这将确保如果 get_post_meta 返回单个结果而不是数组,它将创建一个包含它的数组,否则它将执行您想要的array_filter()

【讨论】:

  • 您缺少array_filter() 的第二个参数。如果结果是单数,您就不会过滤结果。
  • @Barmar 为什么要过滤单个结果而 OP 的 sn-p 不包含他的 array_filter 的第二个参数,这是因为它是可选的,请阅读该函数的 PHP 文档跨度>
  • 我将get_post_meta 的最后一个参数误读为array_filter
  • 感谢您的信息。这有点过头了。很抱歉浪费您的时间。
猜你喜欢
  • 2017-05-03
  • 2018-11-10
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
相关资源
最近更新 更多