Как очистить значения полей выбора в столбце meta?

Я добавил поле выбора в метатете Post. Вот код, и он отлично работает. Мой вопрос: мне нужно дезинфицировать значения перед обновлением метаданных? Если да, как это должно быть сделано?

Вот как я добавляю мета-поле:

<?php $value = get_post_meta( $post->ID, 'my_options', true ); ?> <select name="my_options"> <option value="option1" <?php selected( $value, 'option1'); ?>><?php _e('Option 1', 'textdomain'); ?></option> <option value="option2" <?php selected( $value, 'option2'); ?>><?php _e('Option 2', 'textdomain'); ?></option> </select> 

и вот как я обновляю значение:

 if ( isset( $_POST['my_options'] )){ update_post_meta( $post->ID, 'my_options', $_POST['my_options'] ); } 

При принятии ввода пользовательских данных я считаю, что, по возможности, необходимо выполнить проверку данных, а не только санитацию. Например, вы можете ожидать число, значение bool, текстовую строку (даже если вход является selectbox, он может иметь строковое значение) и т. Д. Вы можете santize для этих типов данных; то вы можете пойти дальше и проверить данные с ожидаемыми значениями: integer, float, true / false, электронные письма, URL-адреса и т. д.

Пойдем с вашим selectbox. Он имеет два варианта со значениями «option1» и «option2», поэтому обе строки и могут быть дезинфицированы с помощью sanitize_text_field :

 if ( isset( $_POST['my_options'] )){ $value = sanitize_text_field( $_POST['my_options'] ); update_post_meta( $post->ID, 'my_options', $value ); } 

Но пользователь может легко изменить значение параметров выбора формы из внешнего интерфейса, чтобы он мог манипулировать формой и отправлять значения, отличные от «option1» или «option2», которые вы будете хранить в базе данных. Поскольку вы точно знаете, что такое ожидаемые значения, вы можете выполнить санацию данных и проверку данных. Например:

 if ( isset( $_POST['my_options'] )){ $valid_values = array( 'option1', 'option2', ); $value = sanitize_text_field( $_POST['my_options'] ); if( in_array( $value, $valid_values ) ) { update_post_meta( $post->ID, 'my_options', $value ); } } 

Или вы можете определить настраиваемый обратный вызов саниции для опции «my_options» и использовать sanitize_meta :

 if ( isset( $_POST['my_options'] ) ){ $value = sanitize_meta( 'my_options', $_POST['my_options'], 'post' ) update_post_meta( $post->ID, 'my_options', $value ); } 

И определите обратный вызов santitization:

 add_filter( 'sanitize_post_meta_my_options', 'sanitize_my_options_meta' ); function sanitize_my_options_meta( $value ) { $value = sanitize_text_field( $value ); $valid_values = array( 'option1', 'option2', ); if( ! in_array( $value, $valid_values ) ) { wp_die( 'Invalid value, go back and try again.' ); } return $value; } 

Вы можете использовать любую функцию санитарии, встроенную в WordPress (например, sanitize_text_field ). В качестве альтернативы, если вы беспокоитесь о том, что определенные элементы вводятся в опции выбора, вы можете написать собственную функцию санитарии с помощью функции sanitize_meta .