Wordpress 以编程方式更新ACF select字段数据
我有一个字段名为“sales_rep”的ACF select字段。它包含以下内容: 无名氏 巴特·辛普森 埃里克·卡特曼 该字段设置为在“用户窗体”上显示,并且仅在“当前用户角色”为管理员时显示 该字段显示在每个用户页面上,我可以手动将其更改为所需的销售代表并保存 问题是,我希望能够在保存用户配置文件时以编程方式更新它。我最终会添加更多代码来确定销售代表,但我简化了本文的问题 下面是我在functions.php中的代码: 尝试1:没有错误,也没有更改值Wordpress 以编程方式更新ACF select字段数据,wordpress,advanced-custom-fields,Wordpress,Advanced Custom Fields,我有一个字段名为“sales_rep”的ACF select字段。它包含以下内容: 无名氏 巴特·辛普森 埃里克·卡特曼 该字段设置为在“用户窗体”上显示,并且仅在“当前用户角色”为管理员时显示 该字段显示在每个用户页面上,我可以手动将其更改为所需的销售代表并保存 问题是,我希望能够在保存用户配置文件时以编程方式更新它。我最终会添加更多代码来确定销售代表,但我简化了本文的问题 下面是我在functions.php中的代码: 尝试1:没有错误,也没有更改值 // Update sales rep
// 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
NOTpersonal\u options\u update
或edit\u user\u profile\u update
与您的建议相同的问题。更新,没有任何更改。无错误。请尝试使用phpMyAdmin用户\ u元表导航数据库。此表是否为您的用户提供了“$field\u key”?