Intereting Posts
Запрос сообщений из двух разных категорий при циклировании внутри другого цикла Настройка плагинов во время обновления плагинов Отправить электронное письмо всем зарегистрированным пользователям Меню пользовательской панели не остается открытым для пользовательской таксономии Создание короткого кода на основе предпочтений пользователей Карта Google, которая открывается в новом окне Как записать в файл (css) Когда налоги зависят от страны, они не отображаются в итогах корзины Как добавить изображение в RSS-канал WordPress без плагина? Показывать пользовательский тип сообщения на странице архива по категориям Разместить постоянную ссылку на главную страницу Выразить нежелательный текст "<! – value: ->" Изменить язык администратора на основе пользователя (в одном месте) Автоматическое изменение состояния сообщения при загрузке первой страницы Плагин возвращает случайную ошибку 404 в URL ReWrite

WP Cron не сохраняет <iframe> или <объект> в почтовом теле

Я использую wp_cron для автоматического захвата сообщений с удаленного сайта и сохраняю их в своем wp db.

ВНИМАНИЕ! Я выполняю свой код из своего плагина, а не из моего шаблона functions.php или где-то еще. У меня есть своя собственная проверка захваченного контента, чтобы предотвратить вредоносный код и т. Д., Поэтому отключение проверки безопасности в WordPress не является проблемой в моем случае, но будьте осторожны, если у вас нет собственной проверки захваченного контента. Всегда проверяйте захваченные значения, если это возможно!

У меня есть в моем плагине одна кнопка для захвата сообщений вручную, нажав на эту кнопку, и она отлично работает. Все хранится так, как я хочу в моей базе данных. Здесь нет проблем.

но тогда у меня есть функция wp_cron которая выполняется для тестирования каждые две минуты (если кто-то нажимает на мою страницу, конечно;), и вот проблема.

Обратите внимание, что код идентичен, просто вместо get_user_id() я установил его вручную в 1 . это, вероятно, единственное изменение между этими двумя кодами.

И проблема в том, что все хранится как ожидалось, включая время, заголовок, slug (он даже захватывает и понижает нагрузку и правильно устанавливает отображаемое изображение для сообщения), теги, категории и дополнительную таксономию. Так что хорошо.

Единственное, что отсутствует, – это основной текст (содержание) сообщения.

При загрузке с администратора вручную. Это что-то вроде:

 <iframe width="650" scrolling="no" height="450" frameborder="0" src="http://example.com/embedframe/3843634"></iframe> 

или

 <object height="450" width="650" ><param name="movie" ... bla bla bla ... shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" height="450" width="650" /></object> 

Итак, это потому, что он отфильтрован и разбит на полоску, я имею в виду object и iframe когда вы не вошли в систему как администратор?

Если да, то как я могу отключить его в своем плагине?

Или что-то еще?

Я действительно думаю, что это только что-то с проблемой безопасности WP, потому что код работает, когда он выполняется администратором вручную. И код функции тот же, и все переменные передаются, как и ожидалось. Просто контент не сохраняется.

РЕДАКТИРОВАТЬ:

Это определенно что-то с защитой WP . Когда я задал в своей переменной содержимого функции auto cron вручную значение «Тестирование автоматического сохранения». сохраняется в обычном режиме. Но когда я устанавливаю его в <iframe>something</iframe> или <object>blablabal</object> это НЕ.

Как отключить эту «проверку», поэтому я могу сохранить свой код с помощью cron?

Есть идеи?

Solutions Collecting From Web of "WP Cron не сохраняет <iframe> или <объект> в почтовом теле"

Вместо того, чтобы вручную удалять защитные фильтры, подобные этому, вы должны просто установить правильного пользователя для запуска этих процессов.

Когда вы вошли в систему и запустили процесс вручную, вы вошли в систему и, таким образом, используете свои учетные данные и используете свои разрешения. Я уверен, что вы являетесь администратором на сайте. У вас есть разрешение на публикацию файла unfiltered_html, что означает, что вы можете отправлять iframes и объекты и все, что вам нравится.

Когда ваше задание cron запускается, у него нет ваших учетных данных. Таким образом, он не получает те же разрешения. Таким образом, фильтры безопасности включаются, и такие вещи, как iframe и такие, блокируются.

Чтобы исправить это, вам нужно изменить свой процесс, чтобы не отключать фильтры, а запускать как вы . Поэтому найдите свой идентификационный номер пользователя в базе данных и непосредственно перед тем, как ваш процесс будет выполнять операции импорта, добавьте этот код:

wp_set_current_user( 123 );

Где «123» – это номер вашего идентификатора пользователя. Тогда код теперь будет «вы» и может делать то же, что и вы. Эти фильтры не будут вступать в силу, поскольку разрешения правильны для текущего пользователя.

Примечание. Это не безопаснее, BTW. Вы по-прежнему позволяете удаленному веб-сайту вставлять на ваш сайт опасные вещи. Поэтому ты доверяешь им, чтобы ты не виноват здесь. Просто помните об этом. Этот метод просто проще, чем ручная работа с фильтрами.

ПРЕДУПРЕЖДЕНИЕ !!!

Всегда проверяйте данные, которые вы сохраняете в базе данных! Этот ответ ниже предполагает, что вы проверяете содержание своего сообщения внутри своей пользовательской функции, которую вы запускаете через cron!

Я нахожу решение этой проблемы обрезки iframe и тегов объектов.

ВНИМАНИЕ! Поместите это только в код функции вашего плагина, который запускается через wp cron. Не помещайте его в свой файл functions.php в свой шаблон или в других местах.

 // before saving post remove_filter('content_save_pre', 'wp_filter_post_kses'); remove_filter('content_filtered_save_pre', 'wp_filter_post_kses'); // save code here // after saving post add_filter('content_save_pre', 'wp_filter_post_kses'); add_filter('content_filtered_save_pre', 'wp_filter_post_kses'); 

ВАЖНЫЙ! Используя префикс content_ мы ограничиваем remove filter -> save our data -> add_filter только содержимое, а не commetns, выдержку и т. Д.

Используйте короткие коды, например, создайте короткий код iframe, затем вы сможете:

 [iframe]example.com[/iframe] 

Вот код для реализации такого короткого кода:

 add_shortcode('iframe', array('iframe_shortcode', 'shortcode')); class iframe_shortcode { function shortcode($atts, $content=null) { extract(shortcode_atts(array( 'url' => '', 'scrolling' => 'no', 'width' => '100%', 'height' => '500', 'frameborder' => '0', 'marginheight' => '0', ), $atts)); if (empty($url)) return '<!-- Iframe: You did not enter a valid URL -->'; return '<iframe src="'.$url.'" title="" width="'.$width.'" height="'.$height.'" scrolling="'.$scrolling.'" frameborder="'.$frameborder.'" marginheight="'.$marginheight.'"><a href="'.$url.'" target="_blank">'.$url.'</a></iframe>'; } } 

Применение:

 [iframe url="http://wpsnipp.com" width="100" height="100" scrolling="yes" frameborder="1" marginheight="2"] 

Источник:

http://wpsnipp.com/index.php/functions-php/iframe-shortcode-for-posts-and-pages/

Если вам нужно вставить объекты, то что-то пошло не так. Используйте OEmbed или создайте короткий код

Пробовав все, это сработало для меня:

 global $allowedposttags; $allowedposttags['div'] = array('align' => array (), 'class' => array (), 'id' => array (), 'dir' => array (), 'lang' => array(), 'style' => array (), 'xml:lang' => array() ); $allowedposttags['iframe'] = array('src' => array () ); 

https://wordpress.org/support/topic/wp_update_post-strips-css-id-attribute?replies=7