警告:array_keys()期望参数1是数组,

时间:2016-12-17 23:33:23

标签: php arrays wordpress

我收到以下警告:

  

警告:array_keys()期望参数1为数组,对象在第7行的/home/inin3486/public_html/wordpress/wp-content/themes/classiera/inc/colors.php中给出

  

警告:max():当只给出一个参数时,它必须是第7行/home/inin3486/public_html/wordpress/wp-content/themes/classiera/inc/colors.php中的数组

这是我们目前在CPanel中展示的内容:

<?php 

function classiera_wpcss_loaded() {

    // Return the lowest priority number from all the functions that hook into wp_head
    global $wp_filter;
    $lowest_priority = max(array_keys($wp_filter['wp_head']));

    add_action('wp_head', 'classiera_wpcss_head', $lowest_priority);

    $arr = $wp_filter['wp_head'];

}
add_action('wp_head', "classiera_wpcss_loaded");

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您收到警告,因为$wp_filter['wp_head']是一个对象,即WP_Hook的一个实例。 PHP构造array_keys需要变量为数组数据类型。

  

WordPress 4.7 changed the hooks。现在,$wp_filter中每个事件的值都是WP_Hook的实例。

回调数组位于公共属性callbacks中,您可以像这样访问:

$wp_filter['wp_head']->callbacks;

代码问题

除了访问公共财产之外,您的代码还有两个基本问题:

  1. 您要添加的新回调,即classiera_wpcss_head,将无效(稍等一段时间解释)。
  2. max会为您提供最高优先级的数字,而不是最低优先级。
  3. 新回拨无法工作 - 请求周期为时已晚

    事件wp_head已经对所有已注册的回调进行了排序,并且正在调用每个回调。您的回调优先级为10.最低的回调已经处理完毕且无法运行。

    我的意思是什么?

    add_action('wp_head', 'classiera_wpcss_head', $lowest_priority);
    

    以上代码无法运行。为什么?定时。添加此回调的功能在优先级10被调用。为此事件添加另一个回调,即wp_head

    。 你能做什么呢?

    我假设您希望classiera_wpcss_head先运行。对?这就是为什么你要寻找最低优先级的数字。相反,只需将优先级为0的回调注册,以确保它是第一个(或第一个)回调。

    免责声明:您不能保证您的回叫会在注册优先级为0的任何其他人之前运行。为什么?当add_action运行时,所有回调都会根据添加其优先级。换句话说,如果另一个add_action( 'wp_head', 'some_callback', 0 );在你的之前运行,你的将在那之后运行。

    max为您提供最高优先级的数字

    PHP构造max为您提供最高优先级的数字,而不是最低优先级。相反,您想要使用min

    但是,您甚至不必这样做,因为数组中的第一个元素是最低优先级的数字。为什么?

    do_action( 'wp_head' );触发(运行)时,按优先级编号将所有回调从最低到最高排序。然后它遍历每一个并按顺序逐个调用它们。

    让我们修复您的代码

    让我们修复代码中的timing issue

    1. 删除上面显示的代码,因为它没有必要。
    2. 在每个根目录下添加回调。
    3. 如果您希望尽早开始回调,请执行以下操作:

      add_action( 'wp_head', 'classiera_wpcss_head', 0 );
      /**
       * Description.
       *
       * @since 1.0.0
       */
      function classiera_wpcss_head() {
          // your code here
      }
      

      将此代码放在文件的根目录下,即不包含在函数classiera_wpcss_loaded中。

      如果您打算将其作为最后一个(最高优先级号码),那么您可以将其设置为9999

答案 1 :(得分:0)

只需将代码从第1行更改为14:

function wpcrown_wpcss_loaded() {

    // Return the lowest priority number from all the functions that hook into wp_head
    global $wp_filter;
    //$lowest_priority = max(array_keys($wp_filter['wp_head'])); (I made this comment)

    add_action('wp_head', 'wpcrown_wpcss_head', $lowest_priority + 1);

    $arr = $wp_filter['wp_head'];}

add_action('wp_head', "wpcrown_wpcss_loaded",$lowest_priority);