Я пытаюсь создать параметры публикации для моего нового шаблона WordPress, но я не знаю, как можно санировать или проверять собственные метаданные публикации перед сохранением:
$data = $_POST['enablog_post_options'];
// Update the meta fields in the database.
update_post_meta( $post_id, 'enablog_post_options',$data );
Все параметры (URL-адрес YouTube, текст, флажки и переключатели) сохраняются с моим уникальным мета-ключом. enablog_post_options
,
Обновить:
sanitize_text_field()
испортил весь мой код (все флажки отмечены при сохранении поста), имхо мне нужно больше чем просто sanitize_text_field()
, так как $_POST['enablog_post_options']
имеет флажки, текстовые поля и многое другое.
Стандарты WordPress рекомендуют использовать wp_unslash()
для каждой глобальной переменной ($ _POST, $ _ GET и т. д.) .. после этого используйте любую функцию очистки в соответствии с вашими потребностями.
$data = sanitize_text_field( wp_unslash( $_POST['enablog_post_options'] ) );
// Update the meta fields in the database.
update_post_meta( $post_id, 'enablog_post_options',$data );
Используйте это для очистки ваших данных:
$data = sanitize_text_field( $_POST['enablog_post_options'] );
// Update the meta fields in the database.
update_post_meta( $post_id, 'enablog_post_options',$data );
Посмотрите на Кодекс Валидация и удаление пользовательских данных
Первый. Предполагая, что $_POST['enablog_post_options']
это массив, который должен быть обработан как массив, повторяющий каждый элемент в цикле. Не в виде строки, все элементы сразу.
Так что смотрите в свой enablog_post_options
Выделите массив и определите зависимую от типа данных технику санитарной обработки для каждого элемента. WP Codex может помочь начало с этим.
Сейчас. Как вы понимаете, какие типы данных вы действительно собираетесь дезинфицировать, я подозреваю, что стоит упомянуть update_post_meta()
встроенные санитарные мероприятия & Пользовательские фильтры вы можете подключить к функции.
Таким образом, любой может посмотреть код update_metadata()
функция, которая делает тяжелую работу для update_post_meta()
здесь, в исходном коде API Core Metadata.
Но между тем он дезинфицирует:
sanitize_key()
а также wp_unslash()
;wp_unslash()
а также sanitize_meta()
(более подробное объяснение этого следует).wpdb::prepare()
звонил из update_metadata()
->wpdb::update()
;Продезинфицировать с sanitize_meta()
,
Удобный способ дополнительной очистки мета [пользовательской] записи — через sanitize_meta()
. update_metadata()
уже подключает потенциально существующий пользовательский фильтр очистки, который вы должны создать, к процессу очистки метаполя. Это делается через sanitize_meta()
,
Это называется из update_metadata()
вот так со всеми вашими мета параметрами поста:
$meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type );
Таким образом, вы можете просто сделать специальный фильтр очистки для работы с вашей мета-публикацией, как это (пример из WP Codex sanitize_meta()
описание, ссылка выше):
// --- sanitize_meta() call is commented out because it is called from update_metadata()
// $clean_value = sanitize_meta( 'birth-year', $user_input, 'user' );
function sanitize_birth_year_meta( $year ) {
$now = date( 'Y' );
$then = $now - 115; // No users older than 115.
if ( $then > $year || $year > $now ) {
wp_die( 'Invalid entry, go back and try again.' );
}
return $year;
}
add_filter( 'sanitize_user_meta_birth-year', 'sanitize_birth_year_meta' );
Продолжая с некоторым воображаемым кодом, в sanitize_birth_year_meta()
вместо $year
вы получите свой $data
содержимое, которое нужно очистить при вызове фильтра.