Bird
Raised Fist0
Wordpressframework~5 mins

Request and response handling in Wordpress

Choose your learning style10 modes available
Introduction

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.
Syntax
Wordpress
<?php
// Access request data
$variable = $_GET['param'] ?? $_POST['param'] ?? null;

// Send response
wp_send_json_success($data);
wp_send_json_error($error_message);

// Register REST API endpoint
add_action('rest_api_init', function () {
  register_rest_route('namespace/v1', '/route', [
    'methods' => 'GET',
    'callback' => 'your_callback_function',
  ]);
});

Use $_GET and $_POST to get data sent by users.

Use wp_send_json_success() and wp_send_json_error() to send JSON responses easily.

Examples
This gets the 'name' from the URL and shows a greeting.
Wordpress
<?php
// Get a value from URL query
$name = $_GET['name'] ?? 'Guest';
echo 'Hello, ' . esc_html($name);
This sends a JSON response with a success message.
Wordpress
<?php
// Send JSON success response
$data = ['message' => 'Success!'];
wp_send_json_success($data);
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

  1. Step 1: Understand HTTP POST data handling

    Data sent by users through a POST request is stored in the $_POST superglobal in PHP.
  2. 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.
  3. Final Answer:

    $_POST -> Option B
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    return new WP_REST_Response($data, 200); -> Option D
  4. 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

  1. Step 1: Analyze the parameter check

    The function checks if id equals '42'. If yes, it returns an array with message 'Found'.
  2. 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).
  3. Final Answer:

    200 -> Option A
  4. Quick Check:

    Valid data returns 200 OK [OK]
Hint: Array return = 200 OK; WP_Error return = error code [OK]
Common Mistakes:
  • Assuming WP_Error always returns 200
  • Confusing string '42' with integer 42
  • Ignoring default REST API status codes
4. You wrote this WordPress REST API endpoint callback:
function my_callback(\WP_REST_Request $request) {
  $data = $request->get_param('data');
  wp_send_json_success($data);
  echo 'Done';
}
What is the problem with this code?
medium
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

  1. Step 1: Understand wp_send_json_success behavior

    This function sends JSON response and calls exit(), stopping further code execution.
  2. Step 2: Analyze code after wp_send_json_success

    The echo 'Done'; line is unreachable because the script exits before it.
  3. Final Answer:

    The echo statement after wp_send_json_success() will never run -> Option A
  4. 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

  1. Step 1: Retrieve JSON body parameters properly

    In WordPress REST API, $request->get_json_params() safely parses JSON body data.
  2. 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.
  3. 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.
  4. Final Answer:

    Use $request->get_json_params()['name'] and return WP_REST_Response -> Option C
  5. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard