Title: wp_xmlrpc_server::wp_newPost
Published: April 25, 2014
Last modified: April 28, 2025

---

# wp_xmlrpc_server::wp_newPost( array $args ): int|󠀁[IXR_Error](https://developer.wordpress.org/reference/classes/ixr_error/)󠁿

## In this article

 * [Parameters](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#source)
 * [Hooks](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#hooks)
 * [Related](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#wp--skip-link--target)

Creates a new post for any registered post type.

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#parameters)󠁿

 `$args`arrayrequired

Method arguments. Note: top-level arguments must be ordered as documented.

 * `0` int
 * Blog ID (unused).
 * `1` string
 * Username.
 * `2` string
 * Password.
 * `3` array
 *  Content struct for adding a new post. See [wp_insert_post()](https://developer.wordpress.org/reference/functions/wp_insert_post/)
   for information on additional post fields
    - `post_type` string
    - Post type. Default `'post'`.
    - `post_status` string
    - Post status. Default `'draft'`
    - `post_title` string
    - Post title.
    - `post_author` int
    - Post author ID.
    - `post_excerpt` string
    - Post excerpt.
    - `post_content` string
    - Post content.
    - `post_date_gmt` string
    - Post date in GMT.
    - `post_date` string
    - Post date.
    - `post_password` string
    - Post password (20-character limit).
    - `comment_status` string
    - Post comment enabled status. Accepts `'open'` or `'closed'`.
    - `ping_status` string
    - Post ping status. Accepts `'open'` or `'closed'`.
    - `sticky` bool
    - Whether the post should be sticky. Automatically false if `$post_status` is`'
      private'`.
    - `post_thumbnail` int
    - ID of an image to use as the post thumbnail/featured image.
    - `custom_fields` array
    - Array of meta key/value pairs to add to the post.
    - `terms` array
    - Associative array with taxonomy names as keys and arrays of term IDs as values.
    - `terms_names` array
    - Associative array with taxonomy names as keys and arrays of term names as 
      values.
    - `enclosure` array
    -  Array of feed enclosure data to add to post meta.
       * `url` string
       * URL for the feed enclosure.
       * `length` int
       * Size in bytes of the enclosure.
       * `type` string
       * Mime-type for the enclosure.
          }

## 󠀁[Return](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#return)󠁿

 int|[IXR_Error](https://developer.wordpress.org/reference/classes/ixr_error/) Post
ID on success, [IXR_Error](https://developer.wordpress.org/reference/classes/ixr_error/)
instance otherwise.

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#source)󠁿

    ```php
    public function wp_newPost( $args ) {
    	if ( ! $this->minimum_args( $args, 4 ) ) {
    		return $this->error;
    	}

    	$this->escape( $args );

    	$username       = $args[1];
    	$password       = $args[2];
    	$content_struct = $args[3];

    	$user = $this->login( $username, $password );
    	if ( ! $user ) {
    		return $this->error;
    	}

    	// Convert the date field back to IXR form.
    	if ( isset( $content_struct['post_date'] ) && ! ( $content_struct['post_date'] instanceof IXR_Date ) ) {
    		$content_struct['post_date'] = $this->_convert_date( $content_struct['post_date'] );
    	}

    	/*
    	 * Ignore the existing GMT date if it is empty or a non-GMT date was supplied in $content_struct,
    	 * since _insert_post() will ignore the non-GMT date if the GMT date is set.
    	 */
    	if ( isset( $content_struct['post_date_gmt'] ) && ! ( $content_struct['post_date_gmt'] instanceof IXR_Date ) ) {
    		if ( '0000-00-00 00:00:00' === $content_struct['post_date_gmt'] || isset( $content_struct['post_date'] ) ) {
    			unset( $content_struct['post_date_gmt'] );
    		} else {
    			$content_struct['post_date_gmt'] = $this->_convert_date( $content_struct['post_date_gmt'] );
    		}
    	}

    	/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
    	do_action( 'xmlrpc_call', 'wp.newPost', $args, $this );

    	unset( $content_struct['ID'] );

    	return $this->_insert_post( $user, $content_struct );
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/class-wp-xmlrpc-server.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-includes/class-wp-xmlrpc-server.php#L1324)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/class-wp-xmlrpc-server.php#L1324-L1363)

## 󠀁[Hooks](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#hooks)󠁿

 [do_action( ‘xmlrpc_call’, string $name, array|string $args, wp_xmlrpc_server $server )](https://developer.wordpress.org/reference/hooks/xmlrpc_call/)

Fires after the XML-RPC user has been authenticated but before the rest of the method
logic begins.

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#related)󠁿

| Uses | Description | 
| [wp_xmlrpc_server::_insert_post()](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/_insert_post/)`wp-includes/class-wp-xmlrpc-server.php` |

Helper method for wp_newPost() and wp_editPost(), containing shared logic.

  | 
| [wp_xmlrpc_server::minimum_args()](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/minimum_args/)`wp-includes/class-wp-xmlrpc-server.php` |

Checks if the method received at least the minimum number of arguments.

  | 
| [wp_xmlrpc_server::_convert_date()](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/_convert_date/)`wp-includes/class-wp-xmlrpc-server.php` |

Converts a WordPress date string to an [IXR_Date](https://developer.wordpress.org/reference/classes/ixr_date/) object.

  | 
| [do_action()](https://developer.wordpress.org/reference/functions/do_action/)`wp-includes/plugin.php` |

Calls the callback functions that have been added to an action hook.

  | 
| [wp_xmlrpc_server::escape()](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/escape/)`wp-includes/class-wp-xmlrpc-server.php` |

Escapes string or array of strings for database.

  | 
| [wp_xmlrpc_server::login()](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/login/)`wp-includes/class-wp-xmlrpc-server.php` |

Logs user in.

  |

[Show 3 more](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#)

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_newpost/?output_format=md#changelog)󠁿

| Version | Description | 
| [3.4.0](https://developer.wordpress.org/reference/since/3.4.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_xmlrpc_server%2Fwp_newpost%2F)
before being able to contribute a note or feedback.