save_post + insert_post = infinite loop

This is because the first time you go round the loop $post is the current post. But the second time you go around the loop, $post has not changed. The same thing happens the 3rd, 4th, 5th, etc

Because the $post variable is the current post of that page, not the post you’ve just saved/inserted, the loops if statement will always be true, and an infinite loop entails. Instead of checking the $post variable, you should check the ID of the post that is being saved. If we look at the call that executes the action save_post:

do_action('save_post', $post_ID, $post);

We now see that save_post has parameters!! So if we indicate when adding that the function accepts 1 parameters:

add_action('save_post', 'createGallery',1,1);

Then add the post ID parameter and use that instead:

function createGallery ($post_ID) {
    if ( get_post_type($post_ID) == 'activity' ) {
        $gallerypost = array(
            'post_content' => 'the text of the post',
            'post_status' => 'publish', 
            'post_title' => 'Photo album', 
            'post_type' => 'post', 
            'post_author' => 1);  
        wp_insert_post( $gallerypost );
    }
}

Then your infinite loop should be gone! If it isn’t then you’ve made a considerable leap towards making your code more accurate since you are now working on the correct data.

I would warn that changing 'post_type' => 'post', to 'post_type' => 'activity', would reintroduce the infinite loop.

Leave a Comment