Как я могу остановить wp_update_post, испортив код примера HTML?

Я показываю небольшие фрагменты кода HTML / PHP на интерфейсе (с подсветкой синтаксиса). Записи отображаются как персонализированные сообщения FAQ и имеют плагин (страница дерева CMS), чтобы изменить порядок меню, на котором они отображаются. Всякий раз, когда я меняю заказ, он вызывает wp_update_post , обновляющий ID , menu_order , post_parent , post_type . Для отладки я post_content свойство post_content прямо перед обновлением и сразу после этого, и он менялся ужасно.

До (правильно):

 [html light="true"]</body>[/html] 

После (грязный):

 [html light="true"]</body>[/html] 

Если я сделаю это пару раз, это станет настоящим адом, чтобы вернуться:

 [html light="true"]</body>[/html] 

Он выглядит точно так же, как htmlspecialchars() с ENT_NOQUOTES

Обратите внимание, что они относятся к представлению «исходный код», а не к интерфейсу. Браузеры корректно обрабатывают состояние «До» и отображают его как

 </body> 

Как я могу предотвратить его запутывание?

Solutions Collecting From Web of "Как я могу остановить wp_update_post, испортив код примера HTML?"

Это была ошибка https://wordpress.org/plugins/syntaxhighlighter/ . В нем есть некоторые функции, которые имеют какое-то отношение к этому, а именно encode_shortcode_contents_slashed_noquickedit , encode_shortcode_contents_callback .

Теперь я заменил его на https://wordpress.org/plugins/crayon-syntax-highlighter/, но к тому моменту, когда я подтвердил, что это была ошибка другого плагина, я уже написал решение.

 function wpse190396_insert_post_data($data, $postarr){ if($postarr['filter'] == 'db' && ($data['post_type'] == 'fix' || $data['post_type'] == 'faq') && (strpos($data['post_content'],'&amp;lt;') !== false || strpos($data['post_content'],'&amp;nbsp;') !== false || strpos($data['post_content'],'&amp;gt;') !== false )){ $data['post_content'] = htmlspecialchars_decode($data['post_content']); } return $data; } add_action( 'wp_insert_post_data', 'wpse190396_insert_post_data', 10, 2 );