您应该在显示数据时而不是在保存数据时对其进行scape。为了净化,我认为在这种情况下最好的选择是sanitize_text_field()
if( isset( $_POST[\'my_meta_box_select\'] ) ) {
update_post_meta( $post_id, \'my_meta_box_select\', sanitize_text_field( $_POST[\'my_meta_box_select\'] ) );
}
然后,仅当要将数据用作应该使用的属性时
esc_attr():
$selected = isset( $values[\'my_meta_box_select\'] ) ? esc_attr( $values[\'my_meta_box_select\'][0] ) : \'\';
<select name="my_meta_box_select" id="my_meta_box_select">
<option value="asia" <?php $selected == \'asia\') ? \'selected\'; ?>>Asia</option>
<option value="africa" <?php $selected == \'africa\') ? \'selected\'; ?>>Africa</option>
<option value="america" <?php $selected == \'america\') ? \'selected\'; ?>>America</option>
</select>
如果还想验证数据,则应按照Rarst在回答中的建议,与有效值列表进行比较(或其他验证比较)(在这种情况下,您可以跳过清理,因为如果该值具有无效值,则不会触发
update_post_meta()
功能):
if( isset( $_POST[\'my_meta_box_select\'] ) ) {
$value = $_POST[\'my_meta_box_select\'];
if ( in_array( $value, array(\'asia\', \'africa\', \'america\'), true ) ) {
update_post_meta( $post_id, \'my_meta_box_select\', $value );
}
}