Bird
Raised Fist0
Wordpressframework~5 mins

Custom endpoint registration in Wordpress

Choose your learning style10 modes available
Introduction

Custom endpoints let you add new URLs to your WordPress site that show special content or handle custom actions. This helps you create unique pages or features without changing core files.

You want to add a new page with a unique URL that shows custom data.
You need to create a special URL to handle form submissions or API calls.
You want to add extra sections to user profiles or shop pages.
You want to create SEO-friendly URLs for custom content types.
You want to extend WooCommerce or other plugins with new URL paths.
Syntax
Wordpress
function add_custom_endpoint() {
    add_rewrite_endpoint( 'endpoint-name', EP_ROOT | EP_PAGES );
}
add_action( 'init', 'add_custom_endpoint' );

add_rewrite_endpoint adds a new URL part WordPress recognizes.

Use EP_ROOT for site root URLs or EP_PAGES for pages.

Examples
This adds a /news/ endpoint at the site root, like example.com/news/.
Wordpress
function add_news_endpoint() {
    add_rewrite_endpoint( 'news', EP_ROOT );
}
add_action( 'init', 'add_news_endpoint' );
This adds a /profile/ endpoint to pages, so example.com/about/profile/ works.
Wordpress
function add_profile_endpoint() {
    add_rewrite_endpoint( 'profile', EP_PAGES );
}
add_action( 'init', 'add_profile_endpoint' );
Sample Program

This code adds a new URL /special/ that shows a custom message. It also flushes rewrite rules on activation so the URL works immediately.

Wordpress
<?php
// Register a custom endpoint 'special' at site root
function register_special_endpoint() {
    add_rewrite_endpoint( 'special', EP_ROOT );
}
add_action( 'init', 'register_special_endpoint' );

// Display content when visiting the endpoint
function special_endpoint_content() {
    global $wp_query;
    if ( isset( $wp_query->query_vars['special'] ) ) {
        echo '<h1>Welcome to the Special Page!</h1>';
        exit; // Stop normal page load
    }
}
add_action( 'template_redirect', 'special_endpoint_content' );

// Flush rewrite rules on plugin/theme activation
function flush_rewrite_on_activation() {
    register_special_endpoint();
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'flush_rewrite_on_activation' );
OutputSuccess
Important Notes

After adding a new endpoint, you must flush rewrite rules by visiting Settings > Permalinks or calling flush_rewrite_rules().

Use template_redirect hook to show content for your endpoint before WordPress loads the normal page.

Endpoints add query variables you can check with $wp_query->query_vars.

Summary

Custom endpoints add new URL parts to your WordPress site for special content or actions.

Use add_rewrite_endpoint inside an init hook to register them.

Flush rewrite rules after adding endpoints to make URLs work.

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