Create pages automatically if they don’t exist

I have a WPMU instance that works less like a network of blogs and more like a holistic application. I’m needing to do a check and see if 3 pages with the slugs ‘home’, ‘login’, and ‘password’ exist. If not, I need the system to generate them automatically. If it does, I need the system to ignore.

Right now I have the following code, and for some reason it is generating 5 posts each time a page is loaded. Anyone have advice on how I could better accomplish this?

function check_pages_live(){
        if(get_page_by_title( 'home', page ) != NULL) {
            create_pages_fly('home');
        }
        if(get_page_by_title( 'login', page ) != NULL) {
            create_pages_fly('login');
        }
        if(get_page_by_title( 'password', page ) != NULL) {
            create_pages_fly('password');
        }
    }
    add_action('init','check_pages_live');
    function create_pages_fly($pageName) {
        $createPage = array(
          'post_title'    => $pageName,
          'post_content'  => 'Starter content',
          'post_status'   => 'publish',
          'post_author'   => 1,
          'post_type'     => 'page',
          'post_name'     => $pageName
        );

        // Insert the post into the database
        wp_insert_post( $createPage );
    }

Related posts

Leave a Reply

2 comments

  1. I think you want:

    if( get_page_by_title( 'home' ) == NULL )
        create_pages_fly( 'home' );
    

    Your original if condition said if the page exists (does not equal NULL), then create the page. Also, the 2nd argument should be a string, though it doesn’t really matter in this case since it’ll just default to 'page' anyway.

  2. Very handy function, I’ll be adapting this for some of my work. One minor enhancement I’d make to streamline it a bit more is to put the get_by_title() action into a function, so you can just call that on each page.

    Ex:

    function create_page_if_null($target) {
        if( get_page_by_title($target) == NULL ) {
            create_pages_fly($target);
        }
    }
    
    function check_pages_live(){
        create_page_if_null('about');
        create_page_if_null('contact-us');
        create_page_if_null('home');
        create_page_if_null('news');
        create_page_if_null('privacy');
    }