For a plugin, I need to build my own very early post content and comment content filter. Post content/text changing works, i.e. the modifications end up in the client's browser. But my comment content/text modifications somehow are not persistent, i.e. the client receives the original comment text. The point in time I "hook in" is defined by the [template_redirect][1] hook. I then execute something like this: global $wp_query; // Iterate over all posts in this query. foreach ($wp_query->posts as $post) { // Edit post text $post->post_content = "foo"; // works: ends up at the client // Iterate over all approved comments belonging to this post $comments = get_approved_comments($post->ID); foreach ($comments as $comment) { // Edit comment text $comment->comment_content = "bar"; // this one is lost } } As indicated via the source comments above, `$post->post_content = "foo";` has effect in this context, but `$comment->comment_content = "bar";` doesn't. To track this down at least a bit more, I applied a debug filter to the post content and to the comment content: add_filter('the_content', 'var_dump'); add_filter('comment_text', 'var_dump'); After the content modification routine above, these filters print "foo" in case of post content, but the comment content is printed unchanged (the original content is printed). Hence, `$comment->comment_content = "bar";` seems to be a local modification, while `$post->post_content = "foo";` works as desired: globally. Or is the database even queried two times for comments so that my modification somehow gets overwritten at some point? I've tried to work with `$wp_query->comments`, too. But this variable is `NULL` at the point in time I want and need to hook in. The final and primary question is: **In my loop above, what do I have to do, to modify the comment content persistently?** [1]: http://codex.wordpress.org/Plugin_API/Action_Reference