使用用户数据自动填充高级自定义字段

时间:2018-05-29 作者:user2812779

我正在开发一个新网站,在那里你可以作为用户登录并自己发布消息(自定义帖子类型)。

他们可以自己填写或选择数据的最大部分,但有几个字段必须自动填写,并且在放置消息时不可见。

例如,我有一个名为“name\\u provider”的高级自定义字段,ID为“field\\u 5b0bc22b22606”,我希望此字段自动填入当前登录用户的用户名。

当有人放置消息时,他的用户名将自动放置在该字段中。但是,该字段可能不可见或不可编辑。

这是可能的还是无法实现的?

我对互联网做了很多研究,但没有发现任何东西。

这里有人告诉我如何实现上述目标?

EDIT

好吧,我做到了这一点:

function set_acf_field_default_value( $field ) {
    global $current_user;
    get_currentuserinfo();
    switch ( $field[\'name\'] ) {
        case \'name_provivder\':
            $field[\'value\'] = \'\' . $current_user->user_login .\'\';
            break;
    }

    return $field;
}
add_filter(\'acf/load_field\', \'set_acf_field_default_value\' );
这真是太棒了!现在我只有一个问题。

当登录用户创建新帖子时,他可以编辑此字段。如何使这些字段不可编辑?或者我可以隐藏这些字段吗?

EDIT 2

好的,我成功地做到了:

add_filter(\'acf/prepare_field/name=name_provivder\', \'disable_acf_prepare_field\');

function disable_acf_prepare_field( $field ) {

        // Does the user have an Office role?
        $user = wp_get_current_user();
               if ( in_array( \'brons\', (array) $user->roles ) ) {
                  $usergroup = \'brons\';
               }

    switch($field[\'_name\']) {   
        // Which field are we looking for?  
        case \'name_provivder\':
                 if ($usergroup == \'brons\') {
                  // Set the CLASS of the field to use css to hide
                  $field[\'wrapper\'][\'class\'] = \'hide\';
                   }
            break;
    }
return $field;
}

add_action(\'admin_head\', \'my_custom_fonts\');

function my_custom_fonts() {
  echo \'<style>
    .hide {
      display:none;
    } 
  </style>\';
}
如果用户是“brons”,则隐藏此特定字段,是否可以隐藏整个组?文档中没有任何内容。有人有主意吗?

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

是的,这是可以做到的(几乎总是真的;)。。。问题是如何做到这一点?;)

这是解决方案。。。你必须使用acf/load_field 过滤器:

function set_acf_field_default_value( $field ) {
    switch ( $field[\'name\'] ) {
        case \'name_provider\':
            $field[\'value\'] = \'PUT YOUR VALUE HERE\';
            break;
    }

    return $field;
}
add_filter(\'acf/load_field\', \'set_acf_field_default_value\' );
附:当然你可以使用if 语句,但您很少只想预填充一个字段,因此使用switch.

结束

相关推荐

USERS表与USERS_METADATA表的关联似乎已中断

在将自定义主题构建部署到Go Daddy管理的WordPress安装(客户端请求,RIP)后,我注意到了一个问题,其中由WP后端中的管理员帐户创建的用户没有显示在用户列表中。它们出现在用户数据库中,但在users_metadata 表(有admin帐户的条目,但仅此而已)。users表表示没有分配主键-我不确定这是否是问题的一部分。我假设用户ID应该是主键,但很明显我不是SQL专业人士。我的客户需要能够创建用户,以便他的员工可以上传内容。我应该用什么树来解决这个问题?

使用用户数据自动填充高级自定义字段 - 小码农CODE - 行之有效找到问题解决它

使用用户数据自动填充高级自定义字段

时间:2018-05-29 作者:user2812779

我正在开发一个新网站,在那里你可以作为用户登录并自己发布消息(自定义帖子类型)。

他们可以自己填写或选择数据的最大部分,但有几个字段必须自动填写,并且在放置消息时不可见。

例如,我有一个名为“name\\u provider”的高级自定义字段,ID为“field\\u 5b0bc22b22606”,我希望此字段自动填入当前登录用户的用户名。

当有人放置消息时,他的用户名将自动放置在该字段中。但是,该字段可能不可见或不可编辑。

这是可能的还是无法实现的?

我对互联网做了很多研究,但没有发现任何东西。

这里有人告诉我如何实现上述目标?

EDIT

好吧,我做到了这一点:

function set_acf_field_default_value( $field ) {
    global $current_user;
    get_currentuserinfo();
    switch ( $field[\'name\'] ) {
        case \'name_provivder\':
            $field[\'value\'] = \'\' . $current_user->user_login .\'\';
            break;
    }

    return $field;
}
add_filter(\'acf/load_field\', \'set_acf_field_default_value\' );
这真是太棒了!现在我只有一个问题。

当登录用户创建新帖子时,他可以编辑此字段。如何使这些字段不可编辑?或者我可以隐藏这些字段吗?

EDIT 2

好的,我成功地做到了:

add_filter(\'acf/prepare_field/name=name_provivder\', \'disable_acf_prepare_field\');

function disable_acf_prepare_field( $field ) {

        // Does the user have an Office role?
        $user = wp_get_current_user();
               if ( in_array( \'brons\', (array) $user->roles ) ) {
                  $usergroup = \'brons\';
               }

    switch($field[\'_name\']) {   
        // Which field are we looking for?  
        case \'name_provivder\':
                 if ($usergroup == \'brons\') {
                  // Set the CLASS of the field to use css to hide
                  $field[\'wrapper\'][\'class\'] = \'hide\';
                   }
            break;
    }
return $field;
}

add_action(\'admin_head\', \'my_custom_fonts\');

function my_custom_fonts() {
  echo \'<style>
    .hide {
      display:none;
    } 
  </style>\';
}
如果用户是“brons”,则隐藏此特定字段,是否可以隐藏整个组?文档中没有任何内容。有人有主意吗?

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

是的,这是可以做到的(几乎总是真的;)。。。问题是如何做到这一点?;)

这是解决方案。。。你必须使用acf/load_field 过滤器:

function set_acf_field_default_value( $field ) {
    switch ( $field[\'name\'] ) {
        case \'name_provider\':
            $field[\'value\'] = \'PUT YOUR VALUE HERE\';
            break;
    }

    return $field;
}
add_filter(\'acf/load_field\', \'set_acf_field_default_value\' );
附:当然你可以使用if 语句,但您很少只想预填充一个字段,因此使用switch.