Bird
Raised Fist0
Wordpressframework~8 mins

Custom endpoint registration in Wordpress - Performance & Optimization

Choose your learning style10 modes available
Performance: Custom endpoint registration
MEDIUM IMPACT
This affects the server response time and client-side loading speed by adding custom REST API endpoints.
Adding a custom REST API endpoint to serve data
Wordpress
<?php
add_action('rest_api_init', function () {
  global $wpdb;
  register_rest_route('myplugin/v1', '/data/', array(
    'methods' => 'GET',
    'callback' => function() {
      // Use transient cache to store results for 5 minutes
      global $wpdb;
      $cached = get_transient('myplugin_data_cache');
      if ($cached !== false) {
        return $cached;
      }
      $results = $wpdb->get_results("SELECT * FROM large_table");
      set_transient('myplugin_data_cache', $results, 300);
      return $results;
    },
  ));
});
Caching reduces database load and speeds up API response times.
📈 Performance GainReduces server response time by 70-90%, improving LCP.
Adding a custom REST API endpoint to serve data
Wordpress
<?php
add_action('rest_api_init', function () {
  global $wpdb;
  register_rest_route('myplugin/v1', '/data/', array(
    'methods' => 'GET',
    'callback' => function() {
      // Heavy database queries without caching
      global $wpdb;
      $results = $wpdb->get_results("SELECT * FROM large_table");
      return $results;
    },
  ));
});
Heavy database queries run on every request without caching, causing slow server responses.
📉 Performance CostBlocks server response for 200+ ms on each API call, increasing LCP.
Performance Comparison
PatternServer ProcessingNetwork TransferClient Render DelayVerdict
Uncached heavy queriesHigh CPU and DB loadLonger due to slow responseDelays LCP by 200+ ms[X] Bad
Cached query resultsLow CPU and DB loadFaster due to cached dataImproves LCP by 70-90%[OK] Good
Rendering Pipeline
Custom endpoints affect the server-side response time, which impacts when the browser can start rendering the main content.
→Server Processing
→Network Transfer
→First Paint
⚠️ BottleneckServer Processing due to heavy or uncached data queries in endpoint callbacks.
Core Web Vital Affected
LCP
This affects the server response time and client-side loading speed by adding custom REST API endpoints.
Optimization Tips
1Avoid heavy database queries in endpoint callbacks without caching.
2Use transient or object caching to store endpoint data temporarily.
3Test endpoint response times in DevTools Network panel to ensure fast server replies.
Performance Quiz - 3 Questions
Test your performance knowledge
What is the main performance risk when registering a custom REST API endpoint without caching?
AIncreased client-side JavaScript bundle size
BSlow server response due to repeated heavy database queries
CMore CSS reflows on the page
DLonger DOM tree construction
DevTools: Network
How to check: Open DevTools > Network tab, filter by your custom endpoint URL, and observe the response time.
What to look for: Look for long server response times (Time to First Byte) indicating slow endpoint processing.

Practice

(1/5)
1. What is the main purpose of using add_rewrite_endpoint in WordPress?
easy
A. To enqueue styles and scripts
B. To register a new plugin in WordPress
C. To add a new URL part (endpoint) for custom content or actions
D. To create a new database table

Solution

  1. Step 1: Understand the function purpose

    add_rewrite_endpoint is used to add new URL parts to WordPress URLs.
  2. Step 2: Identify correct usage context

    This function helps create custom endpoints for special content or actions, not for plugins, tables, or scripts.
  3. Final Answer:

    To add a new URL part (endpoint) for custom content or actions -> Option C
  4. Quick Check:

    add_rewrite_endpoint adds URL parts = D [OK]
Hint: Endpoints add URL parts for custom content [OK]
Common Mistakes:
  • Confusing endpoints with plugin registration
  • Thinking it creates database tables
  • Assuming it loads scripts or styles
2. Which hook is the correct place to call add_rewrite_endpoint when registering a custom endpoint?
easy
A. wp_footer
B. wp_enqueue_scripts
C. admin_menu
D. init

Solution

  1. Step 1: Recall WordPress hook usage

    The init hook runs early and is the recommended place to add rewrite rules and endpoints.
  2. Step 2: Eliminate incorrect hooks

    wp_enqueue_scripts is for scripts/styles, admin_menu is for admin menus, and wp_footer runs late in page rendering.
  3. Final Answer:

    init -> Option D
  4. Quick Check:

    add_rewrite_endpoint called on init hook = A [OK]
Hint: Use init hook for rewrite endpoints [OK]
Common Mistakes:
  • Using wp_enqueue_scripts instead of init
  • Adding endpoints in admin_menu hook
  • Placing code in wp_footer hook
3. Given this code snippet, what will be the effect on the URL structure?
add_action('init', function() {
  add_rewrite_endpoint('special', EP_PERMALINK | EP_PAGES);
});
medium
A. Adds '/special/' as an endpoint to permalinks and pages URLs
B. Removes all existing endpoints from URLs
C. Creates a new admin menu called 'special'
D. Flushes rewrite rules automatically

Solution

  1. Step 1: Analyze add_rewrite_endpoint parameters

    The first parameter 'special' is the endpoint name; the second parameter sets where it applies: permalinks and pages.
  2. Step 2: Understand the effect on URLs

    This adds '/special/' to URLs of posts and pages, allowing custom handling of that URL part.
  3. Final Answer:

    Adds '/special/' as an endpoint to permalinks and pages URLs -> Option A
  4. Quick Check:

    Endpoint 'special' added to permalinks/pages = B [OK]
Hint: Endpoint name + location = new URL part [OK]
Common Mistakes:
  • Thinking it removes endpoints
  • Confusing endpoints with admin menus
  • Assuming rewrite rules flush automatically
4. What is missing or incorrect in this code that registers a custom endpoint?
add_action('init', function() {
  add_rewrite_endpoint('promo', EP_ROOT);
});
medium
A. The endpoint name 'promo' is invalid
B. Rewrite rules are not flushed after adding the endpoint
C. The hook 'init' is incorrect for this function
D. The constant EP_ROOT cannot be used with add_rewrite_endpoint

Solution

  1. Step 1: Check endpoint registration correctness

    The endpoint name 'promo' is valid, and EP_ROOT is a valid location constant.
  2. Step 2: Identify missing step

    After adding endpoints, rewrite rules must be flushed (usually once) to apply changes; this code does not flush rules.
  3. Final Answer:

    Rewrite rules are not flushed after adding the endpoint -> Option B
  4. Quick Check:

    Flush rewrite rules after adding endpoints = C [OK]
Hint: Flush rewrite rules after adding endpoints [OK]
Common Mistakes:
  • Skipping rewrite rules flush
  • Using wrong hook instead of init
  • Thinking endpoint names must be special
5. You want to add a custom endpoint 'download' that works on posts and pages, and you want to flush rewrite rules only once after activation. Which code snippet correctly achieves this?
hard
A.
function add_download_endpoint() {
  add_rewrite_endpoint('download', EP_PERMALINK | EP_PAGES);
}
add_action('init', 'add_download_endpoint');

register_activation_hook(__FILE__, function() {
  add_download_endpoint();
  flush_rewrite_rules();
});
B.
add_action('init', function() {
  add_rewrite_endpoint('download', EP_ALL);
  flush_rewrite_rules();
});
C.
function add_download_endpoint() {
  add_rewrite_endpoint('download', EP_ROOT);
  flush_rewrite_rules();
}
add_action('init', 'add_download_endpoint');
D.
register_activation_hook(__FILE__, function() {
  add_rewrite_endpoint('download', EP_PERMALINK | EP_PAGES);
});

Solution

  1. Step 1: Register endpoint on init hook

    Function add_download_endpoint adds the endpoint on 'init' hook, which is correct.
  2. Step 2: Flush rewrite rules only once on activation

    Using register_activation_hook to call the endpoint function and then flush rewrite rules ensures flushing happens once on plugin activation.
  3. Step 3: Evaluate other options

    add_action('init', function() {
      add_rewrite_endpoint('download', EP_ALL);
      flush_rewrite_rules();
    });
    flushes rules on every page load (bad).
    function add_download_endpoint() {
      add_rewrite_endpoint('download', EP_ROOT);
      flush_rewrite_rules();
    }
    add_action('init', 'add_download_endpoint');
    flushes inside init (bad).
    register_activation_hook(__FILE__, function() {
      add_rewrite_endpoint('download', EP_PERMALINK | EP_PAGES);
    });
    does not flush rules at all.
  4. Final Answer:

    Register endpoint on 'init' hook and flush rewrite rules once on plugin activation -> Option A
  5. Quick Check:

    Register on init + flush once on activation = A [OK]
Hint: Flush rewrite rules once on activation, not every load [OK]
Common Mistakes:
  • Flushing rewrite rules on every page load
  • Not flushing rewrite rules at all
  • Registering endpoint outside init hook
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