Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WP - Use file in plugin directory as custom Page Template?

Tags:

wordpress

Is it possible for a file in the plugin directory to be used as a custom Page Template?

Also, how do you make a plugin create a page?

I'm developing a plugin for a client based on a theme, he wants this plugin to make sales pages while being able to use his theme on the homepage. This is a product that I'm making for him to market so it needs to be automated all through the plugin.

Is this possible?

EDIT

I have the activation/deactivation hooks in my plugins main file, and it's not working. Here's the code:

$filename = __FILE__;  register_activation_hook($filename, 'superActivation'); register_deactivation_hook($filename, 'superDeactivation');  global $myFile; global $fh; global $stringData; global $filename;  $myFile = "testFile.txt"; $stringData = "Testing\n"; $fh = fopen($myFile, 'w') or die("can't open file");  function superActivation() {     global $myFile; global $fh; global $stringData; global $filename;     fwrite($fh, $stringData);     fclose($fh); }  function superDeactivation() {     $myFile = "testFile.txt";     unlink($myFile); } 
like image 360
Jared Avatar asked Jan 10 '11 14:01

Jared


People also ask

How do I create a custom plugin template?

To add the page template we need to first create the template file and have that file within the templates directory in the plugin directory. Now create the function with the file path for the template file. After adding these codes, we can see a new page template is showing in the template dropdown list.

How do I create a custom post type template in WordPress?

To create a template part for your custom types, start by making a copy of one of the template parts that come with your theme. In the default WordPress themes, template parts are stored in the template-parts folder. You can start from content-page. php or content-single.


1 Answers

You can do this with the template_redirect hook. Here's my code to manually replace the template for a custom post type with one in the theme if there isn't one in the template folder. Put this in your plugin file and then put a folder underneath your plugin called themefiles with your default theme files.

//Template fallback add_action("template_redirect", 'my_theme_redirect');  function my_theme_redirect() {     global $wp;     $plugindir = dirname( __FILE__ );      //A Specific Custom Post Type     if ($wp->query_vars["post_type"] == 'product') {         $templatefilename = 'single-product.php';         if (file_exists(TEMPLATEPATH . '/' . $templatefilename)) {             $return_template = TEMPLATEPATH . '/' . $templatefilename;         } else {             $return_template = $plugindir . '/themefiles/' . $templatefilename;         }         do_theme_redirect($return_template);      //A Custom Taxonomy Page     } elseif ($wp->query_vars["taxonomy"] == 'product_categories') {         $templatefilename = 'taxonomy-product_categories.php';         if (file_exists(TEMPLATEPATH . '/' . $templatefilename)) {             $return_template = TEMPLATEPATH . '/' . $templatefilename;         } else {             $return_template = $plugindir . '/themefiles/' . $templatefilename;         }         do_theme_redirect($return_template);      //A Simple Page     } elseif ($wp->query_vars["pagename"] == 'somepagename') {         $templatefilename = 'page-somepagename.php';         if (file_exists(TEMPLATEPATH . '/' . $templatefilename)) {             $return_template = TEMPLATEPATH . '/' . $templatefilename;         } else {             $return_template = $plugindir . '/themefiles/' . $templatefilename;         }         do_theme_redirect($return_template);     } }  function do_theme_redirect($url) {     global $post, $wp_query;     if (have_posts()) {         include($url);         die();     } else {         $wp_query->is_404 = true;     } } 
like image 194
David Avatar answered Sep 29 '22 15:09

David