Change Status after Comments
-
There is no post status of “archive”. Please explain what you are trying to accomplish.
I have actually created a custom status called ‘archive’ it kind of works like ‘draft’. Though after further testing, I now know this is not going to work for me.
I would actually like to change it to a ‘private’ post after it receives a comment.You’ll need to hook the save comment action and use it to change the status of the comment’s parent.
https://codex.wordpress.org/Plugin_API/Action_Reference/wp_insert_comment
I have tried using that codex to accomplish what I am trying to do but have not come up with a solution yet.
I have also tried using the information at THIS LINK
Though, I am starting to think I may be able to accomplish this using a existing code I have made on the site.
The current code isglobal $post,$current_user; $args = array( 'post_id' => $post->ID ); $comment = get_comments( $args ); get_currentuserinfo(); if ($post->post_author == $current_user->ID && 3 <= count( $comment ) ){ echo do_shortcode( '[button]' ); } elseif ( 3 <= count( $comment ) ) { //blank } else { comment_form(); }Would I be able to hook into something under ‘elseif’ to change the post to private?
the filter I suggested is the correct way to make the post private.
I have tried using that filter different ways and it never worked. There’s nothing in wp_insert_comment that’ll change the status of the post….. could you elaborate a little?
add your code that changes the status inside the filter. It gets called when a comment is saved, so that’s the ideal time to do what you need.
Ok. I get what you are saying and it really does help but it does not solve the problem. I don’t have a code to change the status, that is what I really need help with. I don’t know what to use to change the status.
I have kind of figured something out but it’s not working like I want it to.
Added completely new code to functions.phpglobal $post; $args = array( 'post_id' => $post->ID ); $comment = get_comments( $args ); if ( 3 <= count( $comment ) ){ $post = array( 'ID' => '1015', 'post_status' => 'private' ); wp_update_post($post); } else { //blank }What that should do, as far as I know, is change the status to private after post 1015 receives 3 comments. What it is doing, is changing post 1015, even without comments.
Why is it not picking up if it has 3 comments or any at all and changing it anyways? Also, I would actually like for it to work with all posts, I used 1015 as a test.I am still working on this..
Now I have this codeadd_action( 'comment_post', 'wpse_make_private_after_3_comments', 10, 2 ); function wpse_make_private_after_3_comments( $comment_ID, $comment_approved ) { $comment = get_comment( $comment_ID ); $post_ID = $comment['comment_post_ID']; $comment_count = wp_count_comments( $post_ID ); // If we only have 1 or 2 comments, we'll bail early if ( $comment_count < 3 ) { return; } $post_data = array( 'ID' => $post_ID, 'post_status' => 'private' ); wp_update_post( $post_data ); // You might want to add a wp_redirect() here to // so people don't automatically see a 404 page // when the comment saving is complete since the page will be private. }but after submitting a comment I get this error ‘Fatal error: Cannot use object of type WP_Comment as array’
I got it to work using this snippet
add_action( 'comment_post', 'wpse_make_private_after_3_comments', 10, 2 ); function wpse_make_private_after_3_comments( $comment_ID, $comment_approved ) { $comment = get_comment( $comment_ID ); $post_ID = $comment->comment_post_ID; $comments = wp_count_comments( $post_ID ); // You could also access approved, moderated, spam or trashed comments // from the return object of wp_count_comments(). $comment_count = $comments->total_comments; // If we only have 1 or 2 comments, we'll bail early if ( $comment_count < 3 ) { return; } $post_data = array( 'ID' => $post_ID, 'post_status' => 'private' ); wp_update_post( $post_data ); // You might want to add a wp_redirect() here to // so people don't automatically see a 404 page // when the comment saving is complete since the page will be private. }
The topic ‘Change Status after Comments’ is closed to new replies.
(@eversatile)
9 years, 7 months ago
Hello, I have been trying to get this to work several different ways but can not figure it out, starting to wonder if it’s even possible.
What I am trying to accomplish is, after a post receives a comment then the post status automatically changes from publish to archive.
Can anyone help me with this?