为了账号安全,请及时绑定邮箱和手机立即绑定

如何在从 wp-admin/users.php 页面添加/删除角色时触发

如何在从 wp-admin/users.php 页面添加/删除角色时触发

PHP
动漫人物 2023-10-15 15:14:20
背景在向个人资料添加特定角色(推荐人)时,我在自定义帖子类型上添加个人资料页面,并将其链接到该用户,并在帖子和用户上都有元值。我还检查用户以前是否曾担任过该角色(通过该用户的元值),然后相应地添加/编辑他们的个人资料页面。当我从用户编辑页面添加角色时,所有这些都工作正常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 typeupdated_{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);

}

(无限循环的事情是一个假设,因为它之前发生在我使用另一个钩子时)


查看完整回答
反对 回复 2023-10-15
  • 1 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信