The preview_theme_ob_filter_callback() WordPress PHP function manipulates preview theme links in order to control and maintain location.
Usage
preview_theme_ob_filter_callback($matches);
Custom example:
Input:
$matches = array('href="http://example.com"', 'http://example.com');
Output:
href="http://example.com?preview=true"
Parameters
$matches
(array) – Required. An array containing the matched URL strings.
More information
See WordPress Developer Resources: preview_theme_ob_filter_callback
Examples
Adding a Preview Query to Theme Links
The following code adds a ?preview=true
query to all theme links, allowing users to preview the theme.
function add_preview_query_to_theme_links($buffer) { return preg_replace_callback( '|<a([^>]*) (href=[\'"]([^\'"]+)[\'"])|', 'preview_theme_ob_filter_callback', $buffer); }ob_start('add_preview_query_to_theme_links');
Previewing a Specific Theme
This code previews the “Twenty Twenty” theme by setting the preview query in the URL.
function preview_twenty_twenty_theme($buffer) { if ('twentytwenty' === wp_get_theme()->get('TextDomain')) { return preg_replace_callback( '|<a([^>]*) (href=[\'"]([^\'"]+)[\'"])|', 'preview_theme_ob_filter_callback', $buffer); } return $buffer; }ob_start('preview_twenty_twenty_theme');
Previewing Themes on a Specific Page
This example previews themes only on the homepage by checking if is_home()
is true.
function preview_theme_on_homepage($buffer) { if (is_home()) { return preg_replace_callback( '|<a([^>]*) (href=[\'"]([^\'"]+)[\'"])|', 'preview_theme_ob_filter_callback', $buffer); } return $buffer; }ob_start('preview_theme_on_homepage');
Previewing Themes for Logged-In Users
This code previews themes only for logged-in users by checking if is_user_logged_in()
is true.
function preview_theme_for_logged_in_users($buffer) { if (is_user_logged_in()) { return preg_replace_callback( '|<a([^>]*) (href=[\'"]([^\'"]+)[\'"])|', 'preview_theme_ob_filter_callback', $buffer); } return $buffer; }ob_start('preview_theme_for_logged_in_users');
Previewing Themes for Admin Users
This code previews themes only for admin users by checking if the user has the ‘manage_options’ capability.
function preview_theme_for_admin_users($buffer) { if (current_user_can('manage_options')) { return preg_replace_callback( '|<a([^>]*) (href=[\'"]([^\'"]+)[\'"])|', 'preview_theme_ob_filter_callback', $buffer); } return $buffer; }ob_start('preview_theme_for_admin_users');