解决方案:
首先,theme my login的Jeff Farthing指出,我使用的是add\\u filter而不是add\\u action,并帮助编写了下面的第一个代码,但它仍然存在相同的问题,因此这是朝着正确方向迈出的一步,但不是我的解决方案:
function tml_profile_errors( &$errors ) {
if ( empty( $_POST[\'state\'] ) )
$errors->add( \'empty_missing_\', \'<strong>ERROR</strong>: Please enter your state.\' );
}
add_action( \'user_profile_update_errors\', \'tml_profile_errors\' );
其次,我使用下面的代码在“personal\\u options\\u update”和“edit\\u user\\u profile\\u update”操作中添加了相同的验证步骤。由于这是在保存步骤中运行的,因此它将防止用户保存无效值。表单的字段远不止“state”,这就是为什么下面的示例使用嵌套的if而不是&&;操作员:
function tml_edit_user_profile_update( $user_id ) {
if ( current_user_can(\'edit_user\',$user_id) ) {
if ( !empty( $_POST[\'state\'] ) )
update_user_meta( $user_id, \'state\', $_POST[\'state\'] );
}
}
add_action(\'personal_options_update\', \'tml_edit_user_profile_update\');
add_action(\'edit_user_profile_update\', \'tml_edit_user_profile_update\');