WordPress at a glance
function is not described

wp_xmlrpc_server::wp_newComment() public WP 2.7.0

Create new comment.

{} It's a method of the class: wp_xmlrpc_server{}

Return

Int/IXR_Error. See wp_new_comment().

Usage

$wp_xmlrpc_server = new wp_xmlrpc_server();
$wp_xmlrpc_server->wp_newComment( $args );
$args(array) (required)

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

  • blog_id(int)
    (unused)

  • username(string)

  • password(string)

  • post(string/int)

  • content_struct(array)

Changelog

Since 2.7.0 Introduced.

Code of wp_xmlrpc_server::wp_newComment() WP 5.5.2

<?php
public function wp_newComment( $args ) {
	$this->escape( $args );

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

	/**
	 * Filters whether to allow anonymous comments over XML-RPC.
	 *
	 * @since 2.7.0
	 *
	 * @param bool $allow Whether to allow anonymous commenting via XML-RPC.
	 *                    Default false.
	 */
	$allow_anon = apply_filters( 'xmlrpc_allow_anonymous_comments', false );

	$user = $this->login( $username, $password );

	if ( ! $user ) {
		$logged_in = false;
		if ( $allow_anon && get_option( 'comment_registration' ) ) {
			return new IXR_Error( 403, __( 'Sorry, you must be logged in to comment.' ) );
		} elseif ( ! $allow_anon ) {
			return $this->error;
		}
	} else {
		$logged_in = true;
	}

	if ( is_numeric( $post ) ) {
		$post_id = absint( $post );
	} else {
		$post_id = url_to_postid( $post );
	}

	if ( ! $post_id ) {
		return new IXR_Error( 404, __( 'Invalid post ID.' ) );
	}

	if ( ! get_post( $post_id ) ) {
		return new IXR_Error( 404, __( 'Invalid post ID.' ) );
	}

	if ( ! comments_open( $post_id ) ) {
		return new IXR_Error( 403, __( 'Sorry, comments are closed for this item.' ) );
	}

	if (
		'publish' === get_post_status( $post_id ) &&
		! current_user_can( 'edit_post', $post_id ) &&
		post_password_required( $post_id )
	) {
		return new IXR_Error( 403, __( 'Sorry, you are not allowed to comment on this post.' ) );
	}

	if (
		'private' === get_post_status( $post_id ) &&
		! current_user_can( 'read_post', $post_id )
	) {
		return new IXR_Error( 403, __( 'Sorry, you are not allowed to comment on this post.' ) );
	}

	if ( empty( $content_struct['content'] ) ) {
		return new IXR_Error( 403, __( 'Comment is required.' ) );
	}

	$comment = array(
		'comment_post_ID' => $post_id,
		'comment_content' => $content_struct['content'],
	);

	if ( $logged_in ) {
		$display_name = $user->display_name;
		$user_email   = $user->user_email;
		$user_url     = $user->user_url;

		$comment['comment_author']       = $this->escape( $display_name );
		$comment['comment_author_email'] = $this->escape( $user_email );
		$comment['comment_author_url']   = $this->escape( $user_url );
		$comment['user_ID']              = $user->ID;
	} else {
		$comment['comment_author'] = '';
		if ( isset( $content_struct['author'] ) ) {
			$comment['comment_author'] = $content_struct['author'];
		}

		$comment['comment_author_email'] = '';
		if ( isset( $content_struct['author_email'] ) ) {
			$comment['comment_author_email'] = $content_struct['author_email'];
		}

		$comment['comment_author_url'] = '';
		if ( isset( $content_struct['author_url'] ) ) {
			$comment['comment_author_url'] = $content_struct['author_url'];
		}

		$comment['user_ID'] = 0;

		if ( get_option( 'require_name_email' ) ) {
			if ( strlen( $comment['comment_author_email'] ) < 6 || '' === $comment['comment_author'] ) {
				return new IXR_Error( 403, __( 'Comment author name and email are required.' ) );
			} elseif ( ! is_email( $comment['comment_author_email'] ) ) {
				return new IXR_Error( 403, __( 'A valid email address is required.' ) );
			}
		}
	}

	$comment['comment_parent'] = isset( $content_struct['comment_parent'] ) ? absint( $content_struct['comment_parent'] ) : 0;

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

	$comment_ID = wp_new_comment( $comment, true );
	if ( is_wp_error( $comment_ID ) ) {
		return new IXR_Error( 403, $comment_ID->get_error_message() );
	}

	if ( ! $comment_ID ) {
		return new IXR_Error( 403, __( 'Something went wrong.' ) );
	}

	/**
	 * Fires after a new comment has been successfully created via XML-RPC.
	 *
	 * @since 3.4.0
	 *
	 * @param int   $comment_ID ID of the new comment.
	 * @param array $args       An array of new comment arguments.
	 */
	do_action( 'xmlrpc_call_success_wp_newComment', $comment_ID, $args ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.NotLowercase

	return $comment_ID;
}