Title: WP_REST_Templates_Controller::_sanitize_template_id
Published: February 3, 2022
Last modified: May 20, 2026

---

# WP_REST_Templates_Controller::_sanitize_template_id( string $id ): string

## In this article

 * [Description](https://developer.wordpress.org/reference/classes/wp_rest_templates_controller/_sanitize_template_id/?output_format=md#description)
 * [Parameters](https://developer.wordpress.org/reference/classes/wp_rest_templates_controller/_sanitize_template_id/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/classes/wp_rest_templates_controller/_sanitize_template_id/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/classes/wp_rest_templates_controller/_sanitize_template_id/?output_format=md#source)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_rest_templates_controller/_sanitize_template_id/?output_format=md#changelog)

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

Requesting this endpoint for a template like ‘twentytwentytwo//home’ requires using
a path like /wp/v2/templates/twentytwentytwo//home. There are special cases when
WordPress routing corrects the name to contain only a single slash like ‘twentytwentytwo/
home’.

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

This method doubles the last slash if it’s not already doubled. It relies on the
template ID format {theme_name}//{template_slug} and the fact that slugs cannot 
contain slashes.

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

 `$id`stringrequired

Template ID.

## 󠀁[Return](https://developer.wordpress.org/reference/classes/wp_rest_templates_controller/_sanitize_template_id/?output_format=md#return)󠁿

 string Sanitized template ID.

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

    ```php
    public function _sanitize_template_id( $id ) {
    	$id = urldecode( $id );

    	$last_slash_pos = strrpos( $id, '/' );
    	if ( false === $last_slash_pos ) {
    		return $id;
    	}

    	$is_double_slashed = substr( $id, $last_slash_pos - 1, 1 ) === '/';
    	if ( $is_double_slashed ) {
    		return $id;
    	}
    	return (
    		substr( $id, 0, $last_slash_pos )
    		. '/'
    		. substr( $id, $last_slash_pos )
    	);
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.0/src/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php#L216)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.0/src/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php#L216-L233)

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

| Version | Description | 
| [5.9.0](https://developer.wordpress.org/reference/since/5.9.0/) | Introduced. |

## User Contributed Notes

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