WP_Ajax_Response::add()publicWP 2.1.0

Appends data to an XML response based on given arguments.

With $args defaults, extra data output would be:

<response action='{$action}_$id'>
 <$what id='$id' position='$position'>
	 <response_data><![CDATA[$data]]></response_data>
 </$what>
</response>

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

Хуков нет.

Возвращает

Строку. XML response.

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

$WP_Ajax_Response = new WP_Ajax_Response();
$WP_Ajax_Response->add( $args );
$args(строка|массив)

An array or string of XML response arguments.

По умолчанию: ''

  • what(строка)
    XML-RPC response type. Used as a child element of <response>. (<object>).
    По умолчанию: 'object'

  • action(строка|false)
    Value to use for the action attribute in <response>. Will be appended with _$id on output. If false, $action will default to the value of $_POST['action'].
    По умолчанию: false

  • id(int|WP_Error)
    The response ID, used as the response type id attribute. Also accepts a WP_Error object if the ID does not exist.

  • old_id(int|false)
    The previous response ID. Used as the value for the response type old_id attribute. False hides the attribute.
    По умолчанию: false

  • position(строка)
    Value of the response type position attribute. Accepts 1 (bottom),
    -1 (top), HTML ID (after), or -HTML ID (before).
    По умолчанию: 1 (bottom)

  • data(строка|WP_Error)
    The response content/message. Also accepts a WP_Error object if the ID does not exist.
    По умолчанию: ''

  • supplemental(массив)
    An array of extra strings that will be output within a <supplemental> element as CDATA.
    По умолчанию: empty array

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

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

Код WP_Ajax_Response::add() WP 6.4.3

public function add( $args = '' ) {
	$defaults = array(
		'what'         => 'object',
		'action'       => false,
		'id'           => '0',
		'old_id'       => false,
		'position'     => 1,
		'data'         => '',
		'supplemental' => array(),
	);

	$parsed_args = wp_parse_args( $args, $defaults );

	$position = preg_replace( '/[^a-z0-9:_-]/i', '', $parsed_args['position'] );
	$id       = $parsed_args['id'];
	$what     = $parsed_args['what'];
	$action   = $parsed_args['action'];
	$old_id   = $parsed_args['old_id'];
	$data     = $parsed_args['data'];

	if ( is_wp_error( $id ) ) {
		$data = $id;
		$id   = 0;
	}

	$response = '';
	if ( is_wp_error( $data ) ) {
		foreach ( (array) $data->get_error_codes() as $code ) {
			$response  .= "<wp_error code='$code'><![CDATA[" . $data->get_error_message( $code ) . ']]></wp_error>';
			$error_data = $data->get_error_data( $code );
			if ( ! $error_data ) {
				continue;
			}
			$class = '';
			if ( is_object( $error_data ) ) {
				$class      = ' class="' . get_class( $error_data ) . '"';
				$error_data = get_object_vars( $error_data );
			}

			$response .= "<wp_error_data code='$code'$class>";

			if ( is_scalar( $error_data ) ) {
				$response .= "<![CDATA[$error_data]]>";
			} elseif ( is_array( $error_data ) ) {
				foreach ( $error_data as $k => $v ) {
					$response .= "<$k><![CDATA[$v]]></$k>";
				}
			}

			$response .= '</wp_error_data>';
		}
	} else {
		$response = "<response_data><![CDATA[$data]]></response_data>";
	}

	$s = '';
	if ( is_array( $parsed_args['supplemental'] ) ) {
		foreach ( $parsed_args['supplemental'] as $k => $v ) {
			$s .= "<$k><![CDATA[$v]]></$k>";
		}
		$s = "<supplemental>$s</supplemental>";
	}

	if ( false === $action ) {
		$action = $_POST['action'];
	}
	$x  = '';
	$x .= "<response action='{$action}_$id'>"; // The action attribute in the xml output is formatted like a nonce action.
	$x .= "<$what id='$id' " . ( false === $old_id ? '' : "old_id='$old_id' " ) . "position='$position'>";
	$x .= $response;
	$x .= $s;
	$x .= "</$what>";
	$x .= '</response>';

	$this->responses[] = $x;
	return $x;
}