Я думаю, у вас должна быть статическая переменная в функции, которая отслеживает, была ли вызвана функция.Кроме того, wp_update_post принимает массив, а не объект - по крайней мере, я так делаю.
function edit( $post_ID ) {
static $plugin_has_updated = false;
if ($plugin_has_updated) return;
$plugin_has_updated = true;
$content = "Hello. This is a test.";
$post_arr = array("ID"=>$post_ID, "post_content"=>$content);
wp_update_post( $post_arr );
}
add_action('publish_post', 'edit');