Over the past few days, I have been working on some custom scripts to import information from an older system into WordPress as a custom post type with a great deal of custom meta information. I quickly found the key to doing so is to use the wp_insert_post()
function.
In my case, I am importing information from XML files into PHP arrays. I am then using an array_map()
callback to pull the information out of the imported array, format it the way I want it, assign the appropriate keys to it and more. From there, I am using the wp_insert_post()
function and the add_post_meta()
function to push that information into the WordPress database.
Before inserting a new post, I use a function to check the database and make sure a post doesn’t already exist with that same title. Then, I insert the post. Finally, I add the custom meta information.
My function to check for existing posts looks like:
function wp_exist_post_by_title($title_str) {
global $wpdb;
return $wpdb->get_row( $wpdb->prepare( "SELECT * FROM " . $wpdb->posts . " WHERE post_title = '" . $title_str . "'" ), 'ARRAY_A');
}
Then, I use a function similar to the following to actually import the posts:
function _htmlcenter_import_posts( $posts ) {
if( !is_array( $posts ) )
return false;
$new_posts = array();
foreach( $posts as $p ) {
$post_id = wp_exist_post_by_title( $p['post_title'] );
if( !$post_id ) {
$post_title = $p['post_title'];
$post_id = wp_insert_post( $p );
/* Set a custom post taxonomy - if the taxonomy is hierarchical,
you have to use the term ID */
wp_set_post_terms( $post_id, $p['custom_taxonomy'], 'custom_taxonomy' );
if( array_key_exists( $p['first_custom_meta_field'], $degrees ) ) {
delete_post_meta( $post_id, 'first_custom_meta_field' );
add_post_meta( $post_id, 'first_custom_meta_field', array_values( $custom_meta_fields[$p['first_custom_meta_field']] ) );
}
delete_post_meta( $post_id, 'second_custom_meta_field' );
add_post_meta( $post_id, 'second_custom_meta_field' );
} else {
$post_title = __( 'A post with the title of ' . $post_id['post_title'] . ' already exists' );
$post_id = $post_id['ID'];
}
$new_posts[$post_id] = $post_title;
}
return $new_posts;
}
I hope that helps anyone looking to import old information into a new WordPress blog.
One Response
[…] employees. Should you ever choose to move your employee directory into WordPress, you can easily import the information as posts (most likely a custom post type) and then pull the employee images and add them to WordPress, […]