试图在WordPress中获得最低优先级的数字

时间:2016-12-07 06:32:20

标签: wordpress warnings

您好我正试图从挂钩到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

请帮忙解决这个问题。 感谢

2 个答案:

答案 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");

希望它有所帮助。