重力表单以其他用户的身份提交表单

时间:2018-03-09 作者:Taishi

客户端请求管理员能够像其他用户一样提交表单。我创建了一个管理员表单,该表单具有按角色筛选的现有用户的动态填充下拉列表。提交表单时,提交前过滤器将从用户下拉列表中获取该值,并更改表单数据以反映表单是由所选用户创建的。

阅读重力表单文档可以在表单对象中找到以下属性:

useCurrentUserAsAuthor bool 对于具有Post字段的表单,这将确定是否应使用当前登录用户作为作者来创建Post。1使用当前用户,否则为0。

postAuthor integer 当useCurrentUserAsAuthor设置为0时,此属性包含将用作文章作者的用户Id。

基于此信息,我编写了此筛选函数:

function submit_as_user_proxy( $form )
{
    $id = null;
    $proxy_user_meta = null;
    $user_role = \'\';

    $field_existing_users = null;
    $field_signed_up_as = null;

    foreach ( $form[\'fields\'] as &$field )
    {
        if ( false !== strpos( $field->cssClass, \'existing_users\' ) )
        {
            $field_existing_users = $field;
        }
        if ( false !== strpos( $field->cssClass, \'signed_up_as\' ) )
        {
            $field_signed_up_as = $field;
        }
    }

    $id = $_POST[ \'input_\' . $field_existing_users->id ];
    $proxy_user_meta = get_userdata( $id );
    $roles = $proxy_user_meta->roles;
    if ( ! empty( $roles ) )
    {
        $user_role = $roles[0];
    }
    $_POST[ \'input_\' . $field_signed_up_as->id ] = $user_role;

    $form[\'useCurrentUserAsAuthor\'] = 0;
    $form[\'postAuthor\'] = $id;

    return $form;
}
这不起作用,已成功更改$\\u POST数据,但在条目中查看时,表单对象的更改不会反映在提交中。

有人对此有什么见解吗?

1 个回复
SO网友:Taishi

我发现的一个解决方案是在提交后使用以下方法操纵条目:

function submit_as_user_proxy( $form )
{
    $id = null;
    $proxy_user_meta = null;
    $user_role = \'\';

    $field_existing_users = null;
    $field_signed_up_as = null;

    foreach ( $form[\'fields\'] as &$field )
    {
        if ( false !== strpos( $field->cssClass, \'existing_users\' ) )
        {
            $field_existing_users = &$field;
        }
        if ( false !== strpos( $field->cssClass, \'signed_up_as\' ) )
        {
            $field_signed_up_as = &$field;
        }
    }

    $id = $_POST[ \'input_\' . $field_existing_users->id ];
    $proxy_user_meta = get_userdata( $id );
    $roles = $proxy_user_meta->roles;
    if ( ! empty( $roles ) )
    {
        $user_role = $roles[0];
    }
    $_POST[ \'input_\' . $field_signed_up_as->id ] = $user_role;

    $form[\'useCurrentUserAsAuthor\'] = 0;
    $form[\'postAuthor\'] = $id;

    add_action(
        \'gform_after_submission_\' . $form[\'id\'],
        function( $entry ) use( $id )
        {
            $entry_id = $entry[\'id\'];
            GFAPI::update_entry_property( $entry_id, \'created_by\', $id );
            return $entry;
        }
    );

    return $form;
}

结束

相关推荐

为什么wp_users表中的USER_PASS列是varchar(64)

在处理项目时,我发现“wp\\u users”表中的“user\\u pass”列是varchar(64)。WordPress总是将用户密码存储在md5中,md5是一个32字符的ASCII字符串。那么,为什么不将其存储在具有ascii排序规则的char(32)中呢。我这样问是因为我正在处理一个存储用户密码的表。使用varchar(64)还有其他好处吗。