使用不起作用的USER_REGISTER挂钩更新POST META

时间:2020-03-09 作者:pixelngrain

我想在用户根据注册表单中的最终成员插件字段注册时更新post meta。如果我直接在模板(加载页面)上运行,但不使用钩子,那么下面的代码工作得很好。

Note: 正如我所提到的,如果我在模板文件(刷新页面)上运行代码,但不使用钩子,那么代码将按预期工作。

function gs_add_user_to_group($user_id)
{
    // get the user group by profile
    $groupItem = get_post(um_user(\'team\'));

    // check if post is exists and is a group post type
    if ($groupItem && $groupItem->post_type == Group_Shop_Admin::get_cpt_group()) {

        // get group post meta
        $meta         = gs_get_group_meta_key(\'users\');
        $old_user_ids = get_post_meta($groupItem->ID, $meta, TRUE);

        // check if empty
        if ( ! $old_user_ids) {
            $user_ids = [];
        } else {
            $user_ids = $old_user_ids;
        }

        // push newly register user id
        array_push($user_ids, $user_id);

        if ( ! $old_user_ids) {
            // add new record if not exits
            add_post_meta($groupItem->ID, $meta, $user_ids);
        } else {
            // update and add newly register user id to record
            update_post_meta($groupItem->ID, $meta, $user_ids, $old_user_ids);
        }
    }
}

add_action(\'user_register\', \'gs_add_user_to_group\', 10, 1);
/* End of  gs_add_user_to_group hook */

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

代码中不起作用的部分不是添加或更新post meta,而是获取名为team 您正在通过um_user()

那是因为@WebElaineuser_register 钩子被激发,自定义字段team 尚未添加到数据库中(既不是WordPress也不是UM),因此um_user( \'team\' ) 不返回任何内容/false.

但是如果你想使用user_register 钩子来添加/更新帖子元,您可以使用$_POST[\'team\'] 通过表单提交的值。因此,请替换此:

$groupItem = get_post(um_user(\'team\'));
使用此选项:

if ( $post_id = um_user( \'team\' ) ) {
    $groupItem = get_post( $post_id );
// I\'m just doing a basic validation, but you should try to make it better!
} elseif ( ! empty( $_POST[\'team\'] ) ) {
    $groupItem = get_post( absint( $_POST[\'team\'] ) );
}
或者因为你依赖team meta来自通过UM注册表提交的用户输入,那么最好使用um_registration_complete hook 要添加/更新帖子元,请执行以下操作:

首先,请致电um_fetch_user() 在你打电话之前um_user():

um_fetch_user( $user_id ); // set the user
$groupItem = get_post( um_user( \'team\' ) );
或者,您可以使用get_user_meta():

$post_id = get_user_meta( $user_id, \'team\', true );
$groupItem = get_post( $post_id );
add_action(\'user_register\', \'gs_add_user_to_group\', 10, 1); 使用此选项:

add_action( \'um_registration_complete\', \'gs_add_user_to_group\', 10, 2 );

Tried & tested working on WordPress 5.3.2 with UM 2.1.4.