您可以通过过滤用户元更新调用,通过update_user_metadata 滤器
function myplugin_init() {
add_filter( \'update_user_metadata\', \'myplugin_update_points\', 10, 5 );
}
function myplugin_update_points( $null, $object_id, $meta_key, $meta_value, $prev_value ) {
if ($meta_key == \'qa_point\') {
remove_filter( \'update_user_metadata\', \'myplugin_update_points\', 10, 5 );
global $wpdb; $blog_prefix = $wpdb->get_blog_prefix();
$current_blog_points = get_user_meta( $object_id, $blog_prefix.$meta_key, true );
$points_change = $meta_value - $prev_value;
if (!$current_blog_points) {$new_blog_points = $points_change;}
else {$new_blog_points = $current_blog_points + $points_change;}
update_user_meta( $object_id, $blog_prefix.meta_key, $new_blog_points );
add_filter( \'update_user_metadata\', \'myplugin_update_points\', 10, 5 );
}
// this means: go on with the normal execution in meta.php
return null;
}
这将在更新全局点时,通过额外的用户元条目(仅限)自动为博客存储点。然后,您可以使用一个单独的函数为博客用户检索这些点(第二个参数可选,默认为当前):
function myplugin_get_blog_points($user_id, $blog_id=false) {
if (!$blog_id) {$blog_id = get_current_blog_id();}
$meta_key = \'qapoint\';
global $wpdb; $blog_prefix = $wpdb->get_blog_prefix($blog_id);
$points = get_user_meta( $user_id, $blog_prefix.\'qapoints\', true );
return $points;
}
注意,这可能不包括处理主题内点数据的其他函数,您必须检查它是否通过除此之外的任何方式修改点
update_user_meta
(例如。
delete_user_meta
) 并相应地添加更多代码以适应这种情况。这可能太难,也可能不太难,不值得这么麻烦,但这似乎是可能的。
还要注意的是,这将回顾性地记录处理点,这意味着如果这些点已经存在,你将不知道它们来自哪个博客——只有在你有了这样的代码后才会开始记录。