Wordpress 以编程方式更新ACF select字段数据

Wordpress 以编程方式更新ACF select字段数据,wordpress,advanced-custom-fields,Wordpress,Advanced Custom Fields,我有一个字段名为“sales_rep”的ACF select字段。它包含以下内容: 无名氏 巴特·辛普森 埃里克·卡特曼 该字段设置为在“用户窗体”上显示,并且仅在“当前用户角色”为管理员时显示 该字段显示在每个用户页面上,我可以手动将其更改为所需的销售代表并保存 问题是,我希望能够在保存用户配置文件时以编程方式更新它。我最终会添加更多代码来确定销售代表,但我简化了本文的问题 下面是我在functions.php中的代码: 尝试1:没有错误,也没有更改值 // Update sales rep

我有一个字段名为“sales_rep”的ACF select字段。它包含以下内容:

无名氏 巴特·辛普森 埃里克·卡特曼

该字段设置为在“用户窗体”上显示,并且仅在“当前用户角色”为管理员时显示

该字段显示在每个用户页面上,我可以手动将其更改为所需的销售代表并保存

问题是,我希望能够在保存用户配置文件时以编程方式更新它。我最终会添加更多代码来确定销售代表,但我简化了本文的问题

下面是我在functions.php中的代码:

尝试1:没有错误,也没有更改值

// Update sales rep
add_action( 'edit_user_profile_update', 'update_rep' );
add_action( 'personal_options_update', 'update_rep' );


function update_rep( $user_id )
{
    update_user_meta( $user_id, 'sales_rep', 'Eric Cartman' );
}
// Update sales rep
add_action( 'edit_user_profile_update', 'update_rep' );
add_action( 'personal_options_update', 'update_rep' );


function update_rep( $user_id )
{
    $field_key = "sales_rep";
    $value = array("Eric Cartman");
    update_field( $field_key, $value, $user_id );
}
尝试2:没有错误,也没有更改值

// Update sales rep
add_action( 'edit_user_profile_update', 'update_rep' );
add_action( 'personal_options_update', 'update_rep' );


function update_rep( $user_id )
{
    update_user_meta( $user_id, 'sales_rep', 'Eric Cartman' );
}
// Update sales rep
add_action( 'edit_user_profile_update', 'update_rep' );
add_action( 'personal_options_update', 'update_rep' );


function update_rep( $user_id )
{
    $field_key = "sales_rep";
    $value = array("Eric Cartman");
    update_field( $field_key, $value, $user_id );
}

似乎
user.
prefix可以解决这个问题

尝试
获取/更新带有
用户前缀的
字段。
F.e.:

对于
update\u user\u meta

以前调用delete\u user\u meta可以解决此问题

用户元可能有重复的密钥

试试这个

delete_user_meta( $user_id, $field_key );
add_user_meta( $user_id, $field_key, $value );  
我认为是正确的,
用户
前缀可能是您的问题

还注意到您正在将acf字段数据保存为
数组(“Eric Cartman”)

我假设您的ACF选择字段预定义的选择选项如下所示

John Doe
Bart Simpson
Eric Cartman
这应该适用于您的acf选项

//在编辑配置文件并保存时运行
添加操作(“个人选项更新”、“处理用户配置文件更新”);
//在编辑任何其他配置文件并保存它时运行
添加操作(“编辑用户配置文件更新”、“处理用户配置文件更新”);
//关于用户配置文件更新函数处理程序
函数句柄\用户\配置文件\更新($user\u id){
//更新销售代表
更新销售代表字段($user\u id);
//在此处添加更多用户更新配置文件功能。。。
}
//更新销售代表字段
函数更新\销售\代表\字段($user\u id){
//我们的价值观
$value='Eric Cartman';
//按用户id更新acf用户字段
更新_字段('sales_rep',$value,'user_'。$user_id);
}



出于好奇,这些销售代表真的是你wordpress网站的用户吗

如果是这样,您可以使用站点上的销售代表用户动态填充选择
sales\u rep
user字段,如下所示

John Doe
Bart Simpson
Eric Cartman
function render\u sales\u rep\u select\u字段($field){
//重置销售代表选择字段选项
$field['choices']=[];
//获取具有用户角色sales的用户
$args=数组(
'role'=>'sales',//您的销售代表用户角色
'orderby'=>'user\u nicename',
“订单”=>“ASC”
);
//从上面获取具有参数的用户
$users=get_用户($args);
//对于每个销售代表用户
foreach($users作为$user){
//建立我们的销售代表,按用户\u id>全名选择字段选项
$field['choices'][$user->id]=$user->first\u name.'.$user->last\u name
}
//返回选择字段
返回$field;
}
//使用我们的自定义选择销售代表用户加载用户字段
添加过滤器('acf/load_field/name=sales_rep','render_sales_rep_select_field');
使用此方法,当用户保存对其配置文件的更改时,无需更新字段

例如,如果您像这样
获取\u字段

John Doe
Bart Simpson
Eric Cartman
//获取用户字段销售代表数组
get_字段('sales_rep','user_'.$user_id);//随机用户id
它将返回一个包含
用户id
全名
的数组

Array
    (
        [5] => Eric Cartman
    )

在acf用户选择字段设置中,您需要选择
返回值和标签。

与您的建议相同。更新,没有任何更改。没有错误。如果
echo'',会发生什么;变量转储($user\u id);回声';退出在您的
处理\u用户\u配置文件\u更新功能中?您需要保存一个配置文件才能点击此按钮。我能够解决此问题。那是钩子。必须使用
profile\u update
NOT
personal\u options\u update
edit\u user\u profile\u update
与您的建议相同的问题。更新,没有任何更改。无错误。请尝试使用phpMyAdmin用户\ u元表导航数据库。此表是否为您的用户提供了“$field\u key”?