您好我正试图从挂钩到wp_head的所有函数中获取最低优先级的数字。 我的代码就是这个。
function wpcrown_wpcss_loaded() {
global $wp_filter;
$lowest_priority = max(array_keys($wp_filter['wp_head']));
add_action('wp_head', 'wpcrown_wpcss_head', $lowest_priority + 1);
$arr = $wp_filter['wp_head'];
}
add_action('wp_head', "wpcrown_wpcss_loaded");
但它显示的错误就是这样。
Warning: array_keys() expects parameter 1 to be array
Warning: max() [<a href='function.max'>function.max</a>]: When only one parameter is given, it must be an array in
请帮忙解决这个问题。 感谢
答案 0 :(得分:0)
自WordPress 4.7以来,小心使用$wp_filters
作为数组,
以下是wp .4。,7的指南 Make.wordpress解释:
如果您的插件直接访问$ wp_filter全局而不是使用公共挂钩API,则可能会遇到兼容性问题。
案例1:直接在$ wp_filter数组中设置回调
$wp_filter['save_post'][10]['my_special_key'] = array( 'function' => 'my_callback_function', 'accepted_args' => 2 );
这将不再有效,并将导致致命错误。 $ wp_filter [&#39; save_post&#39;]不再是一个简单的数组。相反,它是一个实现ArrayAccess接口的对象。
您有两种选择可以解决。第一个(也是首选)方法是使用add_filter()或add_action()函数。
add_action( 'save_post', 'my_callback_function', 10, 2 );
如果出于某种原因,你绝对不能,你仍然可以解决这个问题。
if ( ! isset( $wp_filter['save_post'] ) ) {
$wp_filter['save_post'] = new WP_Hook();
} $ wp_filter [&#39; save_post&#39; ] - &gt;回调[10] [&#39; my_special_key&#39;] =数组(&#39;功能&#39; =&gt;&#39; my_callback_function&#39;,&#39; accepted_args&#39; = &gt; 2);
案例2:直接取消$ wp_filter数组中的回调
unset( $wp_filter['save_post'][10][ $my_callback_id ] );
由于与案例一相同的原因,这将失败。要解决此问题,您可以使用标准的remove_filter()/ remove_action()函数。
remove_action( 'save_post', 'my_callback_function', 10, 2 );
或者,如果您绝对必须直接访问阵列:
if ( isset( $wp_filter[ 'save_post' ] ) ) {
unset( $wp_filter['save_post']->callbacks[10][ $my_callback_id ] );
}
案例3:检查钩子是否是一个数组
if ( isset( $wp_filter['save_post'] ) && is_array( $wp_filter['save_post'] ) ) {
// do something
}
这将始终返回false。 $ wp_filter [&#39; save_post&#39;]是一个WP_Hook对象。要检查钩子是否有回调,请使用has_action()或has_filter()
if ( has_action( 'save_post' ) ) {
// do something
}
案例4:手动移动$ wp_filter数组指针 如果你在$ wp_filter数组指针上调用next()或prev()来手动管理调用回调的顺序(或者如果你这样做是为了解决#17817),你可能会失败。适当地使用回调优先级,add_action()/ add_filter()和remove_action()/ remove_filter(),让WordPress管理执行顺序。
答案 1 :(得分:0)
正如Benoti所说,$wp_filter
不再是一个数组,因此array_keys
会抛出这些警告,因为需要一个数组。
如果你想在头部的wpcrown_wpcss_head
添加脚本/样式/任何内容(优先级),这应该有效:
1)评论此行动:
// add_action('wp_head', "wpcrown_wpcss_loaded");
2)改为使用这个:
add_action('wp_head', "wpcrown_wpcss_head");
希望它有所帮助。