背景在向个人资料添加特定角色(推荐人)时,我在自定义帖子类型上添加个人资料页面,并将其链接到该用户,并在帖子和用户上都有元值。我还检查用户以前是否曾担任过该角色(通过该用户的元值),然后相应地添加/编辑他们的个人资料页面。当我从用户编辑页面添加角色时,所有这些都工作正常http://localhost:8888/wp-admin/user-edit.php?user_id={SOME USER ID}问题但是,当从(编辑页面引用)上的批量操作/操作按钮添加(或删除)角色时,不会触发挂钩。那么有没有一种方法可以扩展以包含更新或完全删除操作按钮(或其他解决方案)?/wp-admin/users.phpprofile_updateprofile_update/wp-admin/users.php /wp-admin/users.php尝试解决问题我能够使用此过滤器删除批量操作按钮add_filter('bulk_actions-users','__return_empty_array');,但找不到过滤器来删除右侧的操作按钮。有问题的代码function site_refProfile_existingUser( $user_id, $old_user_data ){ if ((get_user_meta( $user_id, 'wp_capabilities')[0]['referee'] !== null) && (metadata_exists('user', $user_id, 'ref_pageID'))) { $profileID = get_user_meta( $user_id, 'ref_pageID')[0]; $postUpdateArgs = array( 'ID' => $profileID, 'post_status' => "private" ); wp_update_post($postUpdateArgs); error_log("making profile :".$profileID." private (User : ".$user_id.")"); } elseif ((get_user_meta( $user_id, 'wp_capabilities')[0]['referee'] == null) && (!metadata_exists('user', $user_id, 'ref_pageID'))) { $refProfileName = "".get_user_meta( $user_id, 'first_name')[0]." ".get_user_meta( $user_id, 'last_name')[0].""; if(substr($refProfileName,-1)== 's'){ $refProfileNameCleaned = $refProfileName."' "; } else{ $refProfileNameCleaned = $refProfileName."'s "; } $refProfileArgs = array( 'post_title' => $refProfileNameCleaned."Profile", 'post_excerpt' => "Read {$refProfileNameCleaned}profile on Bootle Referees' Association's official website", 'post_name' => $refProfileName, 'post_type' => "refprofile", 'post_status' => "publish", 'post_author' => $user_id, );
1 回答
慕姐4208626
TA贡献1852条经验 获得超7个赞
更新:找到解决方案
所以我不认为profile_update
钩子按其应有的方式工作,或者我使用它是错误的。我发现它是profile_update
在帖子/用户的更新被推送之前触发的,这意味着如果我要检查元的值,它们将是旧的值,即使在 WP 文档中它说它传递旧值对于用户作为被调用函数的变量,我感到很有趣,这意味着如果我在函数中查询元值,它将是更新的元值。
如果您需要一个钩子来检查任何(甚至用户)metavalue
上是否有任何钩子,更重要的是在更新推送到数据表后触发,请使用(WP Docs)。post type
updated_{YOUR POST TYPE}_meta
所以而不是
add_action( 'profile_update', 'site_refProfile_existingUser', 10, 2);
我用过这个
add_action( 'updated_user_meta', 'site_refProfile_existingUser',10, 2);
如果您要更新用户的元数据,还要确保在您的函数中remove_action
在开始和add_action
结束时,否则我认为它将陷入无限循环
function site_refProfile_existingUser( $meta_id, $user_id) {
remove_action( 'updated_user_meta', 'site_refProfile_existingUser',10, 2);
// your code.....
add_action( 'updated_user_meta', 'site_refProfile_existingUser',10, 2);
}
(无限循环的事情是一个假设,因为它之前发生在我使用另一个钩子时)
- 1 回答
- 0 关注
- 89 浏览
添加回答
举报
0/150
提交
取消