Уважаемые пользователи форума! Столкнулся с такой проблемой. При публикации записей с помощью функции wp_insert_post(), в html код записи мне необходимо добавить javascript код. Публикация происходит с помощью cron задания в Wordpress. После процесса публикации, теги <javascript>, </javascript> исчезают, исчезает также javascript код внедренный в теги (onclick='код скрипта'). Есть ли возможность, чтобы javascript код не удалялся? Код php: Код (Text): $htmlTitle = 'Пробный'; $html = '<div onclick=\'alert("Ok")\'> Отзывы </div> <script> alert("Ok"); </script>'; $post_data = array( //Сохраняем запись 'ping_status' => 'closed', 'post_title' => $htmlTitle, 'post_content' => $html, 'post_status' => 'publish', 'post_author' => 1, 'post_category' => array(0), 'post_excerpt' => 'Это минитекст' ); $post_id = wp_insert_post($post_data, true); Код html в записи: Код (Text): <div> Отзывы </div> <p> alert(«Ok»); </p>
Добрый день! Попробовали разобраться с Вашей проблемой. Чтобы сохранить JavaScript-код и обработчики событий при вставке поста через `wp_insert_post()`, необходимо временно отключить фильтрацию контента WordPress. Вот как это можно сделать: $htmlTitle = 'Пробный'; $html = '<div onclick=\'alert("Ok")\'> Отзывы </div> <script> alert("Ok"); </script>'; $post_data = array( 'ping_status' => 'closed', 'post_title' => $htmlTitle, 'post_content' => $html, 'post_status' => 'publish', 'post_author' => 1, 'post_category' => array(0), 'post_excerpt' => 'Это минитекст' ); // Отключаем фильтрацию контента kses_remove_filters(); // Вставляем пост $post_id = wp_insert_post($post_data, true); // Восстанавливаем фильтрацию kses_init_filters(); Пояснения: 1. ‘kses_remove_filters()’ — отключает систему фильтрации KSES, которая удаляет «небезопасные» HTML-теги и атрибуты. 2. `wp_insert_post()’ — вставляет пост с исходным HTML, включая `<script>` и атрибуты вроде `onclick`. 3. `kses_init_filters()` — включает фильтрацию обратно после вставки. Важно! - Убедитесь, что код выполняется в безопасном контексте (скрипт генерирует доверенный контент). - Если вы работаете в админ-панели, проверьте права пользователя на `unfiltered_html`. Альтернативный способ через фильтр: Если нужно разрешить только определенные теги/атрибуты глобально, добавьте: add_filter('wp_kses_allowed_html', 'custom_kses_rules', 10, 2); function custom_kses_rules($tags, $context) { if ($context === 'post') { $tags['script'] = array( 'type' => true ); $tags['div']['onclick'] = true; } return $tags; } Этот код разрешает тег `<script>` и атрибут `onclick` для `<div>` в контенте постов.