wp_xmlrpc_server::wp_editPost( array $args )
Edits a post for any registered post type.
Description
The $content_struct parameter only needs to contain fields that should be changed. All other fields will retain their existing values.
Parameters
- $args
-
(Required) Method arguments. Note: arguments must be ordered as documented.<br>
- (int) Blog ID (unused).<br>
- '1'
(string) Username.<br> - '2'
(string) Password.<br> - '3'
(int) Post ID.<br> - '4'
(array) Extra content arguments.<br>
Return
(true|IXR_Error) True on success, IXR_Error on failure.
Source
File: wp-includes/class-wp-xmlrpc-server.php
public function wp_editPost( $args ) {
if ( ! $this->minimum_args( $args, 5 ) )
return $this->error;
$this->escape( $args );
$username = $args[1];
$password = $args[2];
$post_id = (int) $args[3];
$content_struct = $args[4];
if ( ! $user = $this->login( $username, $password ) )
return $this->error;
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'wp.editPost' );
$post = get_post( $post_id, ARRAY_A );
if ( empty( $post['ID'] ) )
return new IXR_Error( 404, __( 'Invalid post ID.' ) );
if ( isset( $content_struct['if_not_modified_since'] ) ) {
// If the post has been modified since the date provided, return an error.
if ( mysql2date( 'U', $post['post_modified_gmt'] ) > $content_struct['if_not_modified_since']->getTimestamp() ) {
return new IXR_Error( 409, __( 'There is a revision of this post that is more recent.' ) );
}
}
// Convert the date field back to IXR form.
$post['post_date'] = $this->_convert_date( $post['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 ( $post['post_date_gmt'] == '0000-00-00 00:00:00' || isset( $content_struct['post_date'] ) )
unset( $post['post_date_gmt'] );
else
$post['post_date_gmt'] = $this->_convert_date( $post['post_date_gmt'] );
// https://core.trac.wordpress.org/attachment/ticket/45322/fix-wp-editpost-draft-dates.patch
// If the API client did not provide post_date then we must not perpetuate the
// value that was stored in the database, or it will appear to be an intentional
// edit. Conveying it here as if it were coming from the API client will cause an
// otherwise zeroed out post_date_gmt to get set with the value that was originally
// stored in the database when the draft was created.
if ( !isset( $content_struct['post_date'] ) ) {
unset( $post['post_date'] );
}
$this->escape( $post );
$merged_content_struct = array_merge( $post, $content_struct );
$retval = $this->_insert_post( $user, $merged_content_struct );
if ( $retval instanceof IXR_Error )
return $retval;
return true;
}
Changelog
Version | Description |
---|---|
3.4.0 | Introduced. |