Is it possible to make a page template available to multiple or all themes without having to save the page template in every single theme folder?

Maybe something like: themes/globalform.php instead of doing this for each theme themes/twentyten/globalform.php

  • I think I found what I was looking for: codex.wordpress.org/… but I've tried putting the page-131.php in pretty much every directory without it working.
    – Raymond
    Jul 2, 2012 at 18:48

2 Answers 2


I believe you have to make a plugin for that. The following code is based on this answer: Is it possible to define a template for a custom post type within a plugin independent of the active theme?

Plugin Name: Universal Template
Plugin URI: https://wordpress.stackexchange.com/questions/57211
Description: Uses a custom template in the plugin directory accordding to Conditional Tags (http://codex.wordpress.org/Conditional_Tags), maybe even other conditions
Version: 1.0
Author: brasofilo
Author URI: https://wordpress.stackexchange.com/users/12615

class Universal_Template

    public function __construct()
        $this->url = plugins_url( '', __FILE__ );   
        $this->path = plugin_dir_path( __FILE__ );
        add_action( 'init', array( $this, 'init' ) );

    public function init() 
        add_filter( 'template_include', array( $this, 'wpse_57211_my_plugin_templates' ) );

    public function wpse_57211_my_plugin_templates( $template ) 
        $post_types = array( 'post' );

        if ( is_post_type_archive( $post_types ) )
            $template = $this->path . '/single-custom.php';

        if ( is_singular( $post_types ) )
            $template = $this->path . '/single-other-custom.php';

        return $template;


$wpse_57211 = new Universal_Template();

You could put files in wordpress/wp-content/themes and then include them from various themes. You could even make a folder named wordpress/wp-content/themes/global-includes or shared.

For me, including a file from the parent directory I couldn't just do:

<?php include_once "../globalform.php"; ?>

Instead I needed to do:

<?php include_once get_template_directory() . "/../globalform.php"; ?>

You could also use get_stylesheet_directory() (gets child theme directory) instead of get_template_directory() (will get parent theme directory if the current theme is a child theme. Since we're getting the parent directory it probably doesn't matter here.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.