我正在编写一个插件,它使用许多不同的操作/过滤器挂钩来操纵用户的不同部分。php页面(例如。manage_users_columns, admin_head, user_row_actions, editable_roles)
在每个钩子的回调函数中,我使用wp\\u get\\u current\\u user()并执行wp查询,以统计当前用户的用户id存储为元值的帖子数。我使用此结果来决定执行的过滤器输出/操作(复杂任务,无法更改)。
因此,在加载用户时。php页面中,WP查询似乎在每个钩子回调函数中执行(这很有意义)。
出于性能原因,我想“嵌套”挂钩。在“init”操作挂钩中,应执行WP查询,并将结果传递给以下操作挂钩和过滤器。还有两个问题:
1) 这里有必要关心性能吗?或者Wordpress是否有一些内部“缓存”机制,可以识别相同的查询,并在加载页面时只执行一次?
2a)以下示例目前有效,但我不确定一般情况下使用该示例是否安全。问题是:由于我的自定义钩子“myfuncs”是在钩子(init)中定义的,所以它是否总是已知的,并且可以钩住,例如在函数中。php还是插件代码?
2b)关于嵌套的WP挂钩(例如admin\\u head-users.php):它们是否根据优先级正常执行,或者它们是否会延迟执行/有时根本不会执行,因为它们是嵌套的?
3) 是否有不同的解决方案/最佳做法?
add_action(\'init\', \'initfunc\', 1 );
add_action(\'myfuncs\', \'myfuncs_callback\', 1 );
public function initfunc() {
global $pagenow;
$args = (array) $pagenow; // only to simplify this example.
do_action( \'myfuncs\', $args );
}
public function myfuncs_callback ($args) {
if($args[0] === "somevalue") {
add_action( \'admin_head-users.php\', \'add_user_css\' ,1 );
}
}
public function add_user_css () {
echo "<style>/*some styles*/</style>";
}