我收到以下警告:
警告: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");
我该如何解决这个问题?
答案 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;
除了访问公共财产之外,您的代码还有两个基本问题:
classiera_wpcss_head
,将无效(稍等一段时间解释)。max
会为您提供最高优先级的数字,而不是最低优先级。事件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。
如果您希望尽早开始回调,请执行以下操作:
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);