Posts added with wp_insert_post are moved to trash automatically

I’ve got a script that loops through some data and automatically creates some posts.

foreach($data['title'] as $title)
{
    $my_post = array(
     'post_title' => $title,
     'post_content' => $data['descr']["{$title}"],
     'post_status' => 'publish',
     'post_author' => 1,
     'post_category' => array(7)
    );

    // Insert the post into the database
    $post_id = wp_insert_post( $my_post );
    add_post_meta($post_id, 'web_link', $data['link']["{$title}"]);
}

After the script is run I got to posts in the backend and see them listed as published. I then go to the homepage (my posts list page) but there are none listed. I go back to the backend to see they have all been moved to trash. I try to restore them all but the same thing just keeps happening.

Read More

Any ideas?

Related posts

Leave a Reply

1 comment

  1. @iamjonesy, One possibility is you your theme already has some deleted posts with similar title or slugs or theme provider has modified the hook with some filter.

    Here is a few things you can do to check:
    Try to find the page with title
    If it’s in the trash, update it & change it’s status;
    Otherwise, programmatically create it.

    foreach($data['title'] as $title)
    {
    
    // Initialize the page ID. This indicates no action has been taken.
        $page_id = -1;
    
    // First, try to get the page
    $page = get_page_by_title( $title, OBJECT, 'page' );
    
    // If the page doesn't exist, create it
    if( null == $page ) {
    

    Otherwise, if the page is in the trash, update it and change its status to publish

    } elseif( 'trash' == strtolower( $page->post_status ) ) {
    
        $page->post_status = 'publish';
        -----your code ---------
    

    Hope this help 🙂