Request and response handling lets your WordPress site talk to users and other systems. It helps you get data from visitors and send back the right information.
When you want to get data from a form submitted by a visitor.
When you need to send a custom message or data back to the browser.
When building a plugin that interacts with external APIs.
When creating custom REST API endpoints in WordPress.
When you want to handle AJAX requests on your site.
This creates a custom REST API endpoint that returns a greeting.
Wordpress
<?php
// Register a REST API endpoint
add_action('rest_api_init', function () {
register_rest_route('myplugin/v1', '/hello', [
'methods' => 'GET',
'callback' => function () {
return ['greeting' => 'Hello from REST API'];
},
]);
});
Sample Program
This plugin adds a simple form using a shortcode. When the form is submitted, it reads the name and shows a greeting.
Wordpress
<?php
/*
Plugin Name: Simple Request Response Demo
*/
// Handle form submission
add_action('init', function () {
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['user_name'])) {
$name = sanitize_text_field($_POST['user_name']);
// Store name in session or do something
echo 'Hello, ' . esc_html($name) . '!';
exit;
}
});
// Add a shortcode to show a form
add_shortcode('name_form', function () {
return'<form method="POST">
<label for="user_name">Enter your name:</label>
<input type="text" id="user_name" name="user_name" required>
<button type="submit">Submit</button>
</form>';
});
OutputSuccess
Important Notes
Always sanitize and validate user input to keep your site safe.
Use WordPress functions like esc_html() to safely show data.
For AJAX or REST API, use proper hooks and return data in JSON format.
Summary
Request handling means getting data users send to your site.
Response handling means sending back messages or data to users.
WordPress offers simple ways to handle both with PHP and REST API.
Practice
(1/5)
1. In WordPress, which superglobal variable is commonly used to access data sent via an HTTP POST request?
easy
A. $_REQUEST
B. $_POST
C. $_GET
D. $GLOBALS
Solution
Step 1: Understand HTTP POST data handling
Data sent by users through a POST request is stored in the $_POST superglobal in PHP.
Step 2: Differentiate from other superglobals
$_GET holds URL query parameters, $_REQUEST combines GET, POST, and COOKIE but is less specific, and $GLOBALS holds all global variables.
Final Answer:
$_POST -> Option B
Quick Check:
POST data = $_POST [OK]
Hint: POST data is always in $_POST superglobal [OK]
Common Mistakes:
Confusing $_GET with $_POST
Using $_REQUEST without knowing its mixed content
Assuming $GLOBALS holds request data
2. Which of the following is the correct way to send a JSON response in a WordPress REST API callback function?
easy
A. wp_send_json($data);
B. header('Content-Type: text/plain'); echo $data;
C. echo json_encode($data);
D. return new WP_REST_Response($data, 200);
Solution
Step 1: Understand WordPress REST API callback requirements
REST API callbacks should return a WP_REST_Response, array, or WP_Error. The framework handles headers, JSON encoding, and status.
Step 2: Compare other options
wp_send_json($data); sends JSON and exits with wp_die(), suitable for AJAX but bypasses REST processing/filters. echo json_encode($data); outputs JSON without headers or exit. header('Content-Type: text/plain'); echo $data; wrong type.
Final Answer:
return new WP_REST_Response($data, 200); -> Option D
Quick Check:
Return WP_REST_Response [OK]
Hint: Return WP_REST_Response for REST API JSON response [OK]
Common Mistakes:
Using wp_send_json() (intended for AJAX handlers)
Using echo without proper headers and exit
Sending wrong content type header
3. Consider this WordPress REST API callback function:
function get_custom_data(\WP_REST_Request $request) {
$param = $request->get_param('id');
if ($param === '42') {
return ['message' => 'Found'];
}
return new WP_Error('not_found', 'ID not found', ['status' => 404]);
}
What will be the HTTP status code if the request URL includes ?id=42?
medium
A. 200
B. 404
C. 500
D. 302
Solution
Step 1: Analyze the parameter check
The function checks if id equals '42'. If yes, it returns an array with message 'Found'.
Step 2: Understand default REST API response codes
Returning an array results in a 200 OK status. Returning WP_Error sets the error status (404 here).
A. The echo statement after wp_send_json_success() will never run
B. wp_send_json_success() does not send JSON
C. get_param() cannot retrieve 'data' parameter
D. Missing return statement causes error
Solution
Step 1: Understand wp_send_json_success behavior
This function sends JSON response and calls exit(), stopping further code execution.
Step 2: Analyze code after wp_send_json_success
The echo 'Done'; line is unreachable because the script exits before it.
Final Answer:
The echo statement after wp_send_json_success() will never run -> Option A
Quick Check:
wp_send_json_success() exits script [OK]
Hint: Code after wp_send_json_success() is unreachable [OK]
Common Mistakes:
Expecting code after wp_send_json_success() to run
Confusing get_param() usage
Thinking wp_send_json_success() returns data instead of exiting
5. You want to create a WordPress REST API endpoint that accepts a POST request with a JSON body containing a 'name' field. Which sequence correctly handles the request and sends a JSON response with a greeting message?
hard
A. Use $request->get_body_params()['name'] to get 'name', then return ['greeting' => 'Hello ' . $name].
B. Use $_POST['name'] directly, then echo JSON encoded greeting and exit.
C. Use $request->get_json_params()['name'] to get 'name', then return new WP_REST_Response(['greeting' => 'Hello ' . $name], 200).
D. Use file_get_contents('php://input') to read JSON body, then use wp_send_json() to send response.
Solution
Step 1: Retrieve JSON body parameters properly
In WordPress REST API, $request->get_json_params() safely parses JSON body data.
Step 2: Return a proper REST response object
Returning WP_REST_Response with data and status code is the recommended way to send structured responses.
Step 3: Evaluate other options
A uses get_body_params() which checks form data ($_POST), empty for JSON body POSTs. C uses $_POST['name'] directly, same issue. D manually reads input bypassing framework helpers and uses wp_send_json() which exits.
Final Answer:
Use $request->get_json_params()['name'] and return WP_REST_Response -> Option C
Quick Check:
Use get_json_params() + WP_REST_Response for JSON POST [OK]
Hint: Use get_json_params() for JSON body in REST API [OK]
Common Mistakes:
Using $_POST or get_body_params for JSON body data
Not decoding JSON body properly
Returning raw arrays instead of WP_REST_Response
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.