Опубликовать / редактировать сообщения после публикации / редактирования – изменения не сохраняются

Я разрабатываю простой плагин, который выполняет дополнительную обработку текстового сообщения, когда пользователь сохраняет / обновляет сообщение (т. Е. Нажимает кнопку Опубликовать сообщение или кнопку «Обновить сообщение»).

function call_my_function_after_edit_post($post_id) { // If this is just a revision, don't do anything if ( wp_is_post_revision( $post_id ) || wp_is_post_autosave( $post_id )) return $post_id; $text = my_string_manipulation_function($_POST['post_content']); $excerpt = my_string_manipulation_function($_POST['post_excerpt']); /* TESTING */ $content = "Old content: \r\n".$_POST['post_content']."\r\n\r\nNew content: \r\n".$text; $fp = fopen($_SERVER['DOCUMENT_ROOT'] . "/test.txt","wb"); fwrite($fp,$content); fclose($fp); /* END OF TESTING */ // unhook this function so it doesn't loop infinitely remove_action('publish_post', 'call_my_function_after_edit_post'); wp_update_post(array('ID' => $post_id, 'post_content' => $text, 'post_excerpt' => $excerpt)); add_action('publish_post', 'call_my_function_after_edit_post'); } add_action('publish_post', 'call_my_function_after_edit_post'); 

Я попытался подключиться к publish_post или save_post , но каждый раз, когда он обрабатывает сообщение, в сообщении сохраняются только изменения «добавленного текста». Все старые изменения плагина отбрасываются.

Например, если плагин изменит пробелы на тире, проблема будет следующей:

 // User starts creating post with text: Hello world // User saves the post and the text is changed via the plugin to: Hello-world // User decides to add additional text: Hello world, how are you? // Plugin should take all the text and process it so expected result is: Hello-world,-how-are-you? // But it ends like this: Hello world,-how-are-you? 

В чем проблема?

Как упоминалось в комментариях @karpstrucking, проблема была в конце с моей функцией: my_string_manipulation_function()

Я использовал preg_replace() для обработки строки родного языка, но я не использовал модификатор /u flag, чтобы указать, что я работаю с символами Unicode . При добавлении этого флага исправлено все странное поведение.