Title: add_rewrite_endpoint
Published: April 25, 2014
Last modified: August 20, 2026

---

# add_rewrite_endpoint( string $name, int $places, string|bool $query_var = true )

## In this article

 * [Description](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#description)
 * [Parameters](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#parameters)
 * [More Information](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#more-information)
 * [Source](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#changelog)
 * [User Contributed Notes](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#user-contributed-notes)

[ Back to top](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#wp--skip-link--target)

Adds an endpoint, like /trackback/.

## 󠀁[Description](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#description)󠁿

Adding an endpoint creates extra rewrite rules for each of the matching places specified
by the provided bitmask. For example:

    ```php
    add_rewrite_endpoint( 'json', EP_PERMALINK | EP_PAGES );
    ```

will add a new rewrite rule ending with “json(/(.*))?/?$” for every permastruct 
that describes a permalink (post) or page. This is rewritten to “json=$match” where
$match is the part of the URL matched by the endpoint regex (e.g. “foo” in “[permalink]/
json/foo/”).

A new query var with the same name as the endpoint will also be created.

When specifying $places ensure that you are using the EP_* constants (or a combination
of them using the bitwise OR operator) as their values are not guaranteed to remain
static (especially `EP_ALL`).

Be sure to flush the rewrite rules – see [flush_rewrite_rules()](https://developer.wordpress.org/reference/functions/flush_rewrite_rules/)–
when your plugin gets activated and deactivated.

## 󠀁[Parameters](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#parameters)󠁿

 `$name`stringrequired

Name of the endpoint.

`$places`intrequired

Endpoint mask describing the places the endpoint should be added.
 Accepts a mask
of:

 * `EP_ALL`
 * `EP_NONE`
 * `EP_ALL_ARCHIVES`
 * `EP_ATTACHMENT`
 * `EP_AUTHORS`
 * `EP_CATEGORIES`
 * `EP_COMMENTS`
 * `EP_DATE`
 * `EP_DAY`
 * `EP_MONTH`
 * `EP_PAGES`
 * `EP_PERMALINK`
 * `EP_ROOT`
 * `EP_SEARCH`
 * `EP_TAGS`
 * `EP_YEAR`

`$query_var`string|booloptional

Name of the corresponding query variable. Pass `false` to skip registering a query_var
for this endpoint. Defaults to the value of `$name`.

Default:`true`

## 󠀁[More Information](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#more-information)󠁿

This adds the endpoint to all link types indicated (e.g. posts, pages, category,
author, search) and then template-loader.php includes the relevant handler file.

The name of the endpoint is added as query variable and this gets as value any text
present after the endpoint name, separated from the name with a ‘/’. The [`template_redirect`](https://developer.wordpress.org/reference/hooks/template_redirect/)
action hook should test this query variable.

This can be used for all sorts of things:

 * ajax handler
 * form submission handler
 * alternative notification handler

## 󠀁[Source](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#source)󠁿

    ```php
    function add_rewrite_endpoint( $name, $places, $query_var = true ) {
    	global $wp_rewrite;
    	$wp_rewrite->add_endpoint( $name, $places, $query_var );
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/rewrite.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.1/src/wp-includes/rewrite.php#L335)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.1/src/wp-includes/rewrite.php#L335-L338)

## 󠀁[Related](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#related)󠁿

| Uses | Description | 
| [WP_Rewrite::add_endpoint()](https://developer.wordpress.org/reference/classes/wp_rewrite/add_endpoint/)`wp-includes/class-wp-rewrite.php` |

Adds an endpoint, like /trackback/.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#changelog)󠁿

| Version | Description | 
| [4.3.0](https://developer.wordpress.org/reference/since/4.3.0/) | Added support for skipping query var registration by passing `false` to `$query_var`. | 
| [2.1.0](https://developer.wordpress.org/reference/since/2.1.0/) | Introduced. |

## 󠀁[User Contributed Notes](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#user-contributed-notes)󠁿

 1.   [Skip to note 3 content](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#comment-content-1638)
 2.    [crstauf](https://profiles.wordpress.org/crstauf/)  [  10 years ago  ](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/#comment-1638)
 3.  [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fadd_rewrite_endpoint%2F%23comment-1638)
     Vote results for this note: 6[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fadd_rewrite_endpoint%2F%23comment-1638)
 4.  Available values for `$places`:
 5.  `EP_NONE`
      Endpoint Mask for default, which is nothing. Bitwise value: 0
 6.  `EP_PERMALINK`
      Endpoint Mask for Permalink. Bitwise value: 1
 7.  `EP_ATTACHMENT`
      Endpoint Mask for Attachment. Bitwise value: 2
 8.  `EP_DATE`
      Endpoint Mask for date. Bitwise value: 4
 9.  `EP_YEAR`
      Endpoint Mask for year Bitwise value: 8
 10. `EP_MONTH`
      Endpoint Mask for month. Bitwise value: 16
 11. `EP_DAY`
      Endpoint Mask for day. Bitwise value: 32
 12. `EP_ROOT`
      Endpoint Mask for root. Bitwise value: 64
 13. `EP_COMMENTS`
      Endpoint Mask for comments. Bitwise value: 128
 14. `EP_SEARCH`
      Endpoint Mask for searches. Bitwise value: 256
 15. `EP_CATEGORIES`
      Endpoint Mask for categories. Bitwise value: 512
 16. `EP_TAGS`
      Endpoint Mask for tags. Bitwise value: 1024
 17. `EP_AUTHORS`
      Endpoint Mask for authors. Bitwise value: 2048
 18. `EP_PAGES`
      Endpoint Mask for pages. Bitwise value: 4096
 19. `EP_ALL_ARCHIVES`
      Endpoint Mask for all archive views. Same as using `EP_DATE`
     | `EP_YEAR` | `EP_MONTH` | `EP_DAY` | `EP_CATEGORIES` | `EP_TAGS` | `EP_AUTHORS`
 20. `EP_ALL`
      Endpoint Mask for everything. Same as using EP_PERMALINK | EP_ATTACHMENT
     | EP_ROOT | EP_COMMENTS | EP_SEARCH | EP_PAGES | EP_ALL_ARCHIVES
 21.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fadd_rewrite_endpoint%2F%3Freplytocom%3D1638%23feedback-editor-1638)
 22.  [Skip to note 4 content](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/?output_format=md#comment-content-1639)
 23.   [crstauf](https://profiles.wordpress.org/crstauf/)  [  10 years ago  ](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/#comment-1639)
 24. [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fadd_rewrite_endpoint%2F%23comment-1639)
     Vote results for this note: 5[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fadd_rewrite_endpoint%2F%23comment-1639)
 25. Rewrite Endpoint API Tutorial: [https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/](https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/)
 26.  * EP_CATEGORIES not working
      * [dunichand68](https://profiles.wordpress.org/dunichand68/) [6 years ago](https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/#comment-4124)
 27.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fadd_rewrite_endpoint%2F%3Freplytocom%3D1639%23feedback-editor-1639)

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fadd_rewrite_endpoint%2F)
before being able to contribute a note or feedback.