set_post_type()WP 2.5.0

Update the post type for the post ID.

The page or post cache will be cleaned for the post ID.

No Hooks.


Int|false. Amount of rows changed. Should be 1 for success and 0 for failure.


set_post_type( $post_id, $post_type );
Post ID to change post type.
Post type. Accepts 'post' or 'page' to name a few.
Default: 'post'



#1 Update the type of posts

Suppose we have a post with ID 15. Let's turn it into a permanent page by changing the post type to page:

$post_id = 15;
if ( set_post_type( $post_id, 'page' ) ) {
	  echo "Post 15 now page";
else {
	  echo "Unable to change the post type to page";


  • Global. wpdb. $wpdb WordPress database abstraction object.


Since 2.5.0 Introduced.

set_post_type() code WP 6.5.3

function set_post_type( $post_id = 0, $post_type = 'post' ) {
	global $wpdb;

	$post_type = sanitize_post_field( 'post_type', $post_type, $post_id, 'db' );
	$return    = $wpdb->update( $wpdb->posts, array( 'post_type' => $post_type ), array( 'ID' => $post_id ) );

	clean_post_cache( $post_id );

	return $return;