2016-05-01 2 views
0

Я пытаюсь создать варианты пост для моего нового WordPress шаблон, но я не знаю, как я могу дезинфицировать или проверить свои собственные после мета-данные перед сохранением:Wordpress дезинфицировать данные перед сохранением с update_post_meta

$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.

Update:

sanitize_text_field() поврежден весь мой код (все флажки проверяются при сохранении поста), ИМХО мне нужно больше, чем просто sanitize_text_field(), потому что $_POST['enablog_post_options'] имеет флажки, текстовые поля и многое другое.

ответ

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); 

Посмотрите Кодекс на Validating Sanitizing and Escaping User Data

+0

Sanitize_text_field повреждает весь мой код (все флажки отмечены, когда я сохраняю сообщение), IMHO мне нужно больше, чем просто sanitize_text_field, потому что $ _POST ['enablog_post_options'] имеет флажки, текстовые поля и многое другое. – Netshad

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

Первый. Предполагая, что $_POST['enablog_post_options'] - это массив, он должен быть дезинфицирован как массив, итерации каждого элемента в цикле. Не как строка, все элементы сразу.

Итак, найдите в своем массиве enablog_post_options и определите для каждого элемента зависящий от типа данных технический вопрос sanitizaion. WP Codex может помочь , начинающийся с этим.

Теперь. Как вы понимаете, какие типы данных вы действительно собираетесь санировать, я подозреваю, что стоит упомянуть встроенные средства дезинфекции update_post_meta() & пользовательских фильтров, которые вы можете подключить к этой функции.

Итак, любой может найти код функции update_metadata(), который делает тяжелую работу для update_post_meta()here in the Core Metadata API source code.

Но то время, он дезинфицирует:

  • мета ключ с sanitize_key() и wp_unslash();
  • meta value 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 Кодекса 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'); 

Продолжая с некоторыми imagnary кода, в sanitize_birth_year_meta() вместо $year вы получите $data содержание, чтобы получить санируется при вызове фильтра.

Смежные вопросы