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

Trying to get lowest priority number in WordPress

您好,我正在尝试从挂接到 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

请帮助解决这个问题。 谢谢

小心使用 $wp_filters 作为数组,因为 WordPress 4.7,

这是 wp .4.,7 的指南 Make.wordpress 说明:

如果您的插件直接访问 $wp_filter 全局而不是使用 public 挂钩 API,您可能 运行 会遇到兼容性问题。

案例一:直接在$wp_filter数组中设置回调

$wp_filter['save_post'][10]['my_special_key'] = array( 'function' => 'my_callback_function', 'accepted_args' => 2 );

这将不再起作用,并且会导致致命错误。 $wp_filter['save_post'] 不再是一个简单的数组。相反,它是一个实现 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[ 'save_post' ]->回调[10]['my_special_key'] = array( 'function' => 'my_callback_function', 'accepted_args' => 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
}

这将始终 return 错误。 $wp_filter['save_post'] 是一个 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 管理执行顺序。

正如 Benoti 所说,$wp_filter 不再是一个数组,因此 array_keys 抛出了这些警告,因为需要一个数组。

如果你想在头部末尾添加脚本/样式/你在 wpcrown_wpcss_head 中的任何内容(优先考虑)这应该有效:

1) 评论此操作:

// add_action('wp_head', "wpcrown_wpcss_loaded");

2) 改用这个:

add_action('wp_head', "wpcrown_wpcss_head");

希望对您有所帮助。