Вопрос или проблема
Я пытаюсь вставить изображение в wp_insert_term() с помощью
$args = array ( 'description' => '<img src="src">');
wp_insert_term( 'sample', 'taxonomy', $args ) ;
Однако оно фильтруется, даже если я ввожу только “<” или “>”, оно не добавляется в описание.
Есть ли способ разрешить этот символ?
Нашел ответ
foreach ( array( 'pre_term_description' ) as $filter ) {
remove_filter( $filter, 'wp_filter_kses' );
}
foreach ( array( 'term_description' ) as $filter ) {
remove_filter( $filter, 'wp_kses_data' );
}
.
Ответ или решение
Вставка специальных символов в description
при использовании wp_insert_term
Если вам необходимо вставить специальные HTML-символы, такие как <
или >
в поле description
при использовании функции wp_insert_term()
, важно знать, что WordPress применяет определенные фильтры для защиты от небезопасного кода. По умолчанию, эта функция обрабатывает ввод, запрещая в него встраиваемый HTML, что может привести к тому, что эти символы не будут сохранены в базе данных.
Шаги по решению проблемы
Для успешной вставки специальных символов в описание термина и предотвращения их фильтрации, можно воспользоваться следующим подходом:
-
Удаление фильтров: Перед тем как вызывать
wp_insert_term()
, необходимо отключить фильтры, которые обрабатывают данные, вызываяremove_filter()
. Это позволит вставить как<
, так и>
вdescription
термина. -
Пример кода:
Вот пример кода, который продемонстрирует, как это сделать:// Удаление фильтров перед вставкой термина foreach ( array( 'pre_term_description' ) as $filter ) { remove_filter( $filter, 'wp_filter_kses' ); } foreach ( array( 'term_description' ) as $filter ) { remove_filter( $filter, 'wp_kses_data' ); } // Вставка термина с использованием специальных символов $args = array( 'description' => '<img src="src">' ); wp_insert_term( 'sample', 'taxonomy', $args ); // Восстановление фильтров (если необходимо) add_filter( 'pre_term_description', 'wp_filter_kses' ); add_filter( 'term_description', 'wp_kses_data' );
-
Объяснение кода:
- В первой части кода мы убираем фильтры, которые ответственны за ограничение вывода HTML.
- Затем, мы вызываем функцию
wp_insert_term()
и передаем ей массив$args
, который теперь может полностью содержать HTML-содержимое. - В конце (если это необходимо), фильтры можно вернуть обратно, чтобы не повлиять на остальную часть вашего приложения.
Важно помнить
Хотя отключение фильтров позволяет вставлять HTML-теги, имейте в виду, что это может представить риск безопасности, если вы не контролируете, какой контент вставляется. Убедитесь, что вводимые данные безопасны и проходят проверку на наличие потенциальных уязвимостей, таких как XSS (межсайтовый скриптинг).
Таким образом, используя указанный подход, вы сможете успешно вставить специальные символы и HTML-теги в описание термина без их фильтрации.