นี่คือสิ่งที่ฉันมาด้วย:
/**
* Determines if the current request we are handling is a REST Request.
* This function can be called even on mu-plugins.
*
* You might want to prefix this function name with
* something more unique to your project.
*
* @return bool
*/
function is_rest(): bool {
$is_cli = php_sapi_name() === 'cli';
$permalink_structure = get_option( 'permalink_structure' );
$rest_prefix = rest_get_url_prefix();
if ( ! empty( $permalink_structure ) && ! $is_cli ) {
/*
* HTTP request with Pretty Permalinks.
*/
if ( substr( $_SERVER['REQUEST_URI'], 0, strlen( $rest_prefix ) ) === $rest_prefix ) {
return true;
}
} elseif ( empty( $permalink_structure ) && ! $is_cli ) {
/*
* HTTP Requests with Plain Permalinks
*
* We can rely on "?rest_route" for plain permalinks, this value don't change:
* wp/wp-includes/rest-api.php:145
*
* All ?rest_route must start with "/":
* wp/wp-includes/rest-api.php:159
*/
if ( isset( $_GET['rest_route'] ) && substr( $_GET['rest_route'], 0, 1 ) === '/' ) {
return true;
}
} elseif ( $is_cli ) {
/*
* CLI request
*/
if ( did_action( 'parse_request' ) ) {
return defined( 'REST_REQUEST' ) && REST_REQUEST;
} else {
throw new RuntimeException( "Maybe someone at StackOverflow can help fill this gap of identifying REST requests on CLI before the parse_request action has fired and the REST_REQUEST constant is available?" );
}
}
return false;
}
ฉันไม่มีเวลามากพอที่จะมองหาการทำให้ CLI ตรวจสอบคำขอ REST ก่อนที่parse_request
การกระทำจะเริ่มต้นขึ้น ฉันเปิดรับข้อเสนอแนะ!
ฉันยังไม่ได้เขียนแบบทดสอบเกี่ยวกับคุณลักษณะนี้ฉันจะอัปเดตคำตอบนี้เมื่อฉันทำ
- แก้ไข
เพิ่งค้นพบว่า WooCommerce จัดการสิ่งนี้อย่างไร WooCommerce ดูเหมือนจะไม่ใช่บัญชีสำหรับลิงก์ถาวร:
public function is_rest_api_request() {
if ( empty( $_SERVER['REQUEST_URI'] ) ) {
return false;
}
$rest_prefix = trailingslashit( rest_get_url_prefix() );
$is_rest_api_request = ( false !== strpos( $_SERVER['REQUEST_URI'], $rest_prefix ) );
return apply_filters( 'woocommerce_is_rest_api_request', $is_rest_api_request );
}
init
ประเภทของการร้องขอไม่ได้กำหนดจนกว่าการแยกวิเคราะห์แบบสอบถามซึ่งเกิดขึ้นหลังจาก นอกจากนี้โปรดทราบว่าส่วนต่างๆของ API สามารถใช้ภายในคำขอที่ไม่ใช่คำขอ REST ได้ดังนั้นคุณอาจเสี่ยงที่จะทำลายบางอย่างหากคุณใช้การตรวจจับนั้น