Programmatically Create a WordPress Page, Post, or Custom Post Type
Programmatically creates a WordPress post based on the incoming parameters.
/**
* Programmatically creates a WordPress post based on the incoming parameters.
*
* Note: This function may need some additional work if you're dealing with non-English languages.
*
* @param string $title The title of the page as presented to the users
* @param string $slug The slug used to access the page via the URL
* @param string $post_type The type of post to create. Can be either 'page' or 'post'
* @param string $template The template to apply to the page.
* @return int The ID of the page that was created. -1 if the page already exists.
*/
function wp_snippets_create_post( $title, $slug, $post_type, $template = null ) {
// Initialize the page ID so we know if it's been created
$page_id = -1;
// If a post doesn't already exist with the specified title, create it
if( null == wp_snippets_get_permalink_by_title( $slug, $post_type ) ) {
$page_id = wp_insert_post(
array(
'comment_status' => 'open',
'ping_status' => 'open',
'post_author' => 1, // Administrator is creating the page
'post_title' => $title,
'post_name' => strtolower( $slug ),
'post_status' => 'publish',
'post_type' => strtolower( $post_type )
)
);
// If a template is specified in the function arguments, let's apply it
if( null != $template ) {
update_post_meta( get_the_ID(), '_wp_page_template', $template );
} // end if
} // end if
return $page_id;
} // end wp_snippets_create_post
/**
* Determine if a post or page already exists with the specified title.
*
* Note: This function may need some additional work if you're dealing with non-English languages.
*
* @param string $title The title used to check if the post exists.
* @param string $post_type The post type that we're checking (could be post, page, or a custom post type)
* @return string The permalink to the post. Null if the post or page doesn't exist.
*/
function wp_snippets_get_permalink_by_title( $title, $post_type ) {
// Initialize the permalink value
$permalink = null;
// Try to get the page by the incoming title
$post = get_page_by_title( strtolower( $title ), OBJECT, $post_type );
// If the post exists, then let's get its permalink
if( null != $post ) {
$permalink = get_permalink( $post->ID );
} // end if
return $permalink;
} // end wp_snippets_get_permalink_by_title