I developed a custom plugin which rewrite some content of my posts, but when i move a post to trash, the action hook ‘save_post’ is triggered and the post is not deleted.

A simplified version of my code :

add_action('save_post', 'rewrite_post', 10, 2);

function rewrite_post($post_id) {
    remove_action('save_post', 'rewrite_post');

    $title = preg_replace('/\_/', ' ', get_the_title($post_id));
    $my_post = array();
    $my_post['ID'] = $post_id;
    $my_post['post_title'] = $title;
    $my_post['post_status'] = 'publish';
    wp_update_post($my_post);

    add_action('save_post', 'rewrite_post');
}

How can i prevent this hook getting triggered when i delete posts ?

1
1

It’s probably easiest to just check the post status within your function.

Untested:

add_action( 'save_post', 'rewrite_post', 10, 2 );

function rewrite_post( $post_id ) {
    if ( 'trash' != get_post_status( $post_id ) ) {
        remove_action( 'save_post', 'rewrite_post' );
        $title = preg_replace( '/\_/', ' ', get_the_title( $post_id ) );
        $my_post = array( );
        $my_post['ID'] = $post_id;
        $my_post['post_title'] = $title;
        $my_post['post_status'] = 'publish';
        wp_update_post( $my_post );
        add_action( 'save_post', 'rewrite_post' );
    }
}

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *