Post-Text-Bereinigung nach Veröffentlichung / Bearbeitung – Änderungen werden nicht gespeichert

Ich entwickle ein einfaches Plugin, das eine zusätzliche Verarbeitung für Post-Text durchführt, wenn der Benutzer den Post speichert / aktualisiert (dh klickt Post veröffentlichen oder Schaltfläche Post aktualisieren).

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'); 

Ich habe versucht, publish_post auf publish_post oder save_post Hooks, aber jedes save_post , wenn es den Beitrag verarbeitet, nur die “zusätzlichen Text” Änderungen werden in Post gespeichert. Alle alten Plugin-Änderungen werden verworfen.

Zum Beispiel, wenn das Plugin Leerzeichen in Bindestriche ändern würde, ist das Problem wie folgt:

 // 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? 

Wo ist das Problem?

Solutions Collecting From Web of "Post-Text-Bereinigung nach Veröffentlichung / Bearbeitung – Änderungen werden nicht gespeichert"

Wie @karpstrucking in den Kommentaren erwähnt hat, war das Problem am Ende mit meiner function: my_string_manipulation_function()

Ich verwendete preg_replace() , um die Zeichenkette des Muttersprachecharakters zu verarbeiten, aber ich benutzte nicht den Modifikator /u um anzugeben, dass ich mit Unicode-Zeichen arbeite. Das Hinzufügen dieses Flags hat alle seltsamen Verhaltensweisen behoben.