函数文档

_jsonp_wp_die_handler()

💡 云策文档标注

概述

_jsonp_wp_die_handler() 是 WordPress 中处理 JSONP 请求时 wp_die() 的处理器,用于终止执行并返回 JSONP 格式的错误响应。

关键要点

  • 函数作为 wp_die() 的处理器,专门处理 JSONP 请求,输出 JSONP 格式的错误信息。
  • 接受参数 $message(必需)、$title(可选)和 $args(可选),通过 _wp_die_process_input() 处理输入。
  • 构建包含错误代码、消息、状态等数据的数组,使用 wp_json_encode() 编码为 JSON。
  • 设置 HTTP 头部,如 Content-Type 为 application/javascript,并添加 X-Content-Type-Options 和 X-Robots-Tag 头。
  • 从 $_GET['_jsonp'] 获取 JSONP 回调函数名,输出格式为 /**/callback(json_data)。
  • 根据 $parsed_args['exit'] 决定是否调用 die() 终止执行。

代码示例

function _jsonp_wp_die_handler( $message, $title = '', $args = array() ) {
    list( $message, $title, $parsed_args ) = _wp_die_process_input( $message, $title, $args );

    $data = array(
        'code'              => $parsed_args['code'],
        'message'           => $message,
        'data'              => array(
            'status' => $parsed_args['response'],
        ),
        'additional_errors' => $parsed_args['additional_errors'],
    );

    if ( isset( $parsed_args['error_data'] ) ) {
        $data['data']['error'] = $parsed_args['error_data'];
    }

    if ( ! headers_sent() ) {
        header( "Content-Type: application/javascript; charset={$parsed_args['charset']}" );
        header( 'X-Content-Type-Options: nosniff' );
        header( 'X-Robots-Tag: noindex' );
        if ( null !== $parsed_args['response'] ) {
            status_header( $parsed_args['response'] );
        }
        nocache_headers();
    }

    $result         = wp_json_encode( $data );
    $jsonp_callback = $_GET['_jsonp'];
    echo '/**/' . $jsonp_callback . '(' . $result . ')';
    if ( $parsed_args['exit'] ) {
        die();
    }
}

注意事项

  • 函数从 WordPress 5.2.0 版本引入,需确保版本兼容性。
  • 依赖 _wp_die_process_input()、status_header()、nocache_headers() 和 wp_json_encode() 等辅助函数。
  • JSONP 回调名从 $_GET['_jsonp'] 获取,需确保请求中包含此参数以避免错误。
  • 输出前检查头部是否已发送,避免重复设置 HTTP 头部。

📄 原文内容

Kills WordPress execution and displays JSONP response with an error message.

Description

This is the handler for wp_die() when processing JSONP requests.

Parameters

$messagestringrequired
Error message.
$titlestringoptional
Error title. Default empty string.
$argsstring|arrayoptional
Arguments to control behavior.

Default:array()

Source

function _jsonp_wp_die_handler( $message, $title = '', $args = array() ) {
	list( $message, $title, $parsed_args ) = _wp_die_process_input( $message, $title, $args );

	$data = array(
		'code'              => $parsed_args['code'],
		'message'           => $message,
		'data'              => array(
			'status' => $parsed_args['response'],
		),
		'additional_errors' => $parsed_args['additional_errors'],
	);

	if ( isset( $parsed_args['error_data'] ) ) {
		$data['data']['error'] = $parsed_args['error_data'];
	}

	if ( ! headers_sent() ) {
		header( "Content-Type: application/javascript; charset={$parsed_args['charset']}" );
		header( 'X-Content-Type-Options: nosniff' );
		header( 'X-Robots-Tag: noindex' );
		if ( null !== $parsed_args['response'] ) {
			status_header( $parsed_args['response'] );
		}
		nocache_headers();
	}

	$result         = wp_json_encode( $data );
	$jsonp_callback = $_GET['_jsonp'];
	echo '/**/' . $jsonp_callback . '(' . $result . ')';
	if ( $parsed_args['exit'] ) {
		die();
	}
}

Changelog

Version Description
5.2.0 Introduced.