WordPress очищает данные перед сохранением с помощью update_post_meta

Я пытаюсь создать параметры публикации для моего нового шаблона 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'] имеет флажки, текстовые поля и многое другое.

0

Решение

Стандарты 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 );
0

Другие решения

Используйте это для очистки ваших данных:

$data = sanitize_text_field( $_POST['enablog_post_options'] );

// Update the meta fields in the database.
update_post_meta( $post_id, 'enablog_post_options',$data );

Посмотрите на Кодекс Валидация и удаление пользовательских данных

0

Первый. Предполагая, что $_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 содержимое, которое нужно очистить при вызове фильтра.

0
По вопросам рекламы [email protected]