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.

Any ideas?

  • How is this script triggered? It sounds like something runs when you visit the front end and is causing the posted to be deleted. Does this always occur just after you visit the front end?
    – s_ha_dum
    Commented Nov 11, 2012 at 23:51
  • The code I listed is in a php file which is loaded into functions.php via require_once(). Eventually it'll be a cron job but at the moment I am loading the file, accessing the backend to trigger it, then I comment it out, and then visit the front-end to see the posts. Yes I can reload the posts lists in the backend and they remaing pushlished until I visit the homepage.
    – iamjonesy
    Commented Nov 12, 2012 at 11:00
  • Disable all plugins and test again. Commented Nov 12, 2012 at 12:10
  • Nothing in that particular piece of code should be deleting your posts, even if you didn't comment it out. (You'd get duplicates). Do what TheDeadMedic said.
    – s_ha_dum
    Commented Nov 12, 2012 at 14:17
  • I'll try disabling all plugins when I get back. It's a bit trickier as it's a WP theme I bought off of themeforrest so it's been pretty modified.
    – iamjonesy
    Commented Nov 12, 2012 at 16:17

1 Answer 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 :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.