_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. |