wp_xmlrpc_server::wp_editPost()publicWP 3.4.0

Edits a post for any registered post type.

The $content_struct parameter only needs to contain fields that should be changed. All other fields will retain their existing values.

Метод класса: wp_xmlrpc_server{}

Хуки из метода

Возвращает

true|IXR_Error. True on success, IXR_Error on failure.

Использование

$wp_xmlrpc_server = new wp_xmlrpc_server();
$wp_xmlrpc_server->wp_editPost( $args );
$args(массив) (обязательный)

Method arguments. Note: arguments must be ordered as documented.

  • 0(int)
    Blog ID (unused).

  • 1(строка)
    Username.

  • 2(строка)
    Password.

  • 3(int)
    Post ID.

  • 4(массив)
    Extra content arguments.

Список изменений

С версии 3.4.0 Введена.

Код wp_xmlrpc_server::wp_editPost() WP 6.5.2

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];

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

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

	$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 ( '0000-00-00 00:00:00' === $post['post_date_gmt'] || isset( $content_struct['post_date'] ) ) {
		unset( $post['post_date_gmt'] );
	} else {
		$post['post_date_gmt'] = $this->_convert_date( $post['post_date_gmt'] );
	}

	/*
	 * 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 was 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;
}