WordPress Version: 6.3
/**
* Adds a middleware to `apiFetch` to set the theme for the preview.
* This adds a `wp_theme_preview` URL parameter to API requests from the Site Editor, so they also respond as if the theme is set to the value of the parameter.
*
* @since 6.3.0
*/
function wp_attach_theme_preview_middleware()
{
// Don't allow non-admins to preview themes.
if (!current_user_can('switch_themes')) {
return;
}
wp_add_inline_script('wp-api-fetch', sprintf('wp.apiFetch.use( wp.apiFetch.createThemePreviewMiddleware( %s ) );', wp_json_encode(sanitize_text_field(wp_unslash($_GET['wp_theme_preview'])))), 'after');
}