对已更新的用户元执行操作,但仅执行一次

时间:2015-02-11 作者:mattl

每当更新用户元数据时,我的插件就会通过http调用第三方。

为此,我使用updated_user_meta hook. 然而,这个钩子似乎被多次调用,对于更新的每一个元都调用一次。

这意味着目前我的插件正在进行几个http调用。

那么,有没有办法知道最后更新的元数据是哪一块。所以我可以在那个时候打一次电话?或者我应该用另一种方式来做?

仅供参考,我不能使用profile_updated 因为它并不总是被呼叫。

一个实际的例子:我让我的用户与Mailchimp列表保持同步。在该列表中,我有额外的自定义字段,这些字段与用户角色、组织ID和组织名称的wordpress元数据字段相匹配。

更新这些详细信息时updated_user_meta 调用三次,每个元数据块调用一次。因此,目前我为每一个调用Mailchimp三次,因为我找不到在最后一段元数据更新时调用的另一个钩子。

1 个回复
最合适的回答,由SO网友:thomascharbit 整理而成

如果您可以假设用户配置文件是一次性编辑的(用户角色、组织ID和组织名称),那么此时您只能挂接一个meta\\u键(说出组织名称)并发送所有信息。在触发此操作时,所有3个元都已在数据库中。

add_action(\'updated_user_meta\', \'when_user_meta_updated\', 10, 3);

function when_user_meta_updated( $meta_id, $object_id, $meta_key, $_meta_value ) {
    // we do this only on one meta not all three    
    if ($meta_key == \'organisation_name\' ) {
            $organisation_name = $_meta_value;
            // get other fields from db
            $user_role         = get_user_meta( $object_id, \'user_role\', true );
            $organisation_ID   = get_user_meta( $object_id, \'organisation_id\', true );


            // HTTP Call

        }
    }

结束