So, the last couple of years I’ve been posting the Advent Calendar set of the day from the LEGO Star Wars and LEGO City box sets. The most mind-numbing part of this was creating the page and tagging it each day, so this year I decided to pre-populate the system with the posts ahead of time.
I leveraged some information on the net and a terrible PHP script, listed below. Whatever you do, I wouldn’t recommend using this on a production system without FIRMLY understanding what’s going on 🙂
In short, I give it the titles of the sets (City, Star Wars) and the year (in this case 2014) and it creates 24 draft posts with the tags required. Since I can automatically get the links, I’ve also created a “rollup” post which I’ll post on xmas day which includes links to all 24 posts.
<?
// last updated 2014-11-23
// created by James Hodgkinson
// designed to programatically create a bunch of posts for my advent calendar posts on my wordpress blog
// http://codex.wordpress.org/Function_Reference/wp_insert_post
// https://tommcfarlin.com/programmatically-create-a-post-in-wordpress/
include( "wp-config.php" );
// post types
$titles = array( "City", "Star Wars" );
$year = 2014;
// Setup the author
$author_id = 1;
foreach( $titles as $title ){
$rollup = "Here's a list of all the sets in the box this year:<br />\n<ul>";
for( $i = 1; $i <= 24; $i++ ){
// Initialize the post ID to -1. This indicates no action has been taken.
$post_id = -1;
$slug = "lego-".str_replace( " ", "-", strtolower( $title ) )."-advent-calendar-{$year}-day-{$i}";
$page_title = "Lego {$title} Advent Calendar {$year} Day {$i}";
print( "Creating page: '{$page_title}'\n" );
// If the page doesn't already exist, then create it
if( null == get_page_by_title( $page_title ) ) {
// Set the page ID so that we know the page was created successfully
$post_data = array(
'post_content' => '',
'comment_status' => 'open',
'ping_status' => 'open',
'post_author' => $author_id,
'post_name' => $slug,
'post_title' => $page_title,
'post_status' => 'draft',
'post_type' => 'post',
'tags_input' => "Advent Calendar, Advent Calendar {$year}, LEGO {$title}",
);
$post_id = wp_insert_post( $post_data );
print( "Created post ID: {$post_id}\n" );
$rollup .= "<li><a href='".get_permalink( $post_id )."'>{$page_title}</a></li>\n";
// Otherwise, we'll stop and set a flag
} else {
// Arbitrarily use -2 to indicate that the page with the title already exists
$post_id = -2;
} // end if
}
$rollup .= "</ul>";
$slug = "lego-".str_replace( " ", "-", strtolower( $title ) )."-advent-calendar-{$year}-rollup";
$page_title = "Lego {$title} Advent Calendar {$year} Rollup";
$post_data = array(
'post_content' => $rollup,
'comment_status' => 'open',
'ping_status' => 'open',
'post_author' => $author_id,
'post_name' => $slug,
'post_title' => $page_title,
'post_status' => 'draft',
'post_type' => 'post',
'tags_input' => "Advent Calendar, Advent Calendar {$year}, LEGO {$title}",
);
//`print( var_dump( $post_data ) );
print( "Creating rollup post for {$title}" );
$post_id = wp_insert_post( $post_data );
print ( "\nDone, postID: {$post_id}\n" );
}
echo "\nDone";
?>
Â