我在过去几天读到的所有内容都表明,如果我想在 user-edit.php (用户管理后端)中保存字段,我应该使用 & 钩子(并且我在这个问题中不包括验证钩子edit_user_profile_update
...... personal_options_update
)
在法典中,他们指出:
考虑一个例子:
update_user_meta($user_id, 'custom_meta_key', $_POST['custom_meta_key']);
$_POST
请务必确保为数据密钥和实际用户元密钥指定不同的密钥名称。如果您对两者使用相同的键,Wordpress 出于某种原因会清空该键下发布的值。
因此,您总是会得到一个空值,$_POST['custom_meta_key']
因此请在 html 输入元素的 name 属性中更改它并附加后缀。将其更改为$_POST['custom_meta_key_data']
,它将正确传递数据。
但是,考虑到我想向现有billing_phone
字段添加验证,我不知道如何创建所述“ custom_meta_key_data
”(例如:'_billing_phone'
、 或'prefix_billing_phone'
),然后将值输入到所述 prefix_billing_phone 中,然后转换为'billing_phone'
via update_user_meta()
。
我在下面提供了我的基本代码,我已经在互联网上搜索了两天的解决方案,但我找不到解决方法。
此外,str_replace()
不执行操作,这让我查看内部,user-edit.php
并且注释支持上面引用的注释,在点击更新和配置文件重新加载之间,它将每个变量保存为_billing_
(前缀“_”)并记录原始值(前面的 if 语句/下面的代码)并保存该值 - 不是我条件/尝试验证的内容。我不知道如何复制它,以便我可以简单地验证我的字段......
add_action( 'personal_options_update', 'audp_save_user_account_fields' );
add_action( 'edit_user_profile_update', 'audp_save_user_account_fields' );
function audp_save_user_account_fields( $user_id ) {
/* Input Value: "0412 345 678"
* SHOULD Become: "0412345678"
*/
$billing_phone = str_replace( array( ' ', '(', ')' ), '', $_POST['billing_phone'] );
if ( !empty( $_POST['billing_phone'] ) && preg_match( '/^04[0-9]{8}$/D', $billing_phone ) ) {
$billing_phone_query = get_users( array(
'meta_key' => 'billing_phone',
'meta_value' => $billing_phone,
) );
foreach ( $billing_phone_query as $query ) {
if ( $user_id == $query->ID ) {
/* This value ($billing_phone) should be eg: "0412345678"
* but remains "0412 345 678"
*/
update_user_meta( $user_id, 'billing_phone', $billing_phone );
}
}
}
}
跃然一笑