/var/www/html_us/wp-content/plugins/dreamteam-shortcodes/page-teamplate.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
class DreamTeamPageTemplater
{
  private static 
$instance;
  protected 
$templates;
  public static function 
get_instance()
  {
    if (
null == self::$instance) {
      
self::$instance = new DreamTeamPageTemplater();
    }

    return 
self::$instance;
  }

  private function 
__construct()
  {
    
$this->templates = array();
    
// Add a filter to the wp 4.7 version attributes metabox
    
add_filter('theme_page_templates', array($this'add_new_template'));

    
// Add a filter to the save post to inject out template into the page cache
    
add_filter('wp_insert_post_data', array($this'register_project_templates'));

    
// Add a filter to the template include to determine if the page has our 
    // template assigned and return it's path
    
add_filter('template_include', array($this'view_project_template'));


    
// Add your templates to this array.
    
$this->templates = array(
      
'templates/sps-template.php' => 'DRT - SPS page',
    );
  }

  public function 
add_new_template($posts_templates)
  {
    
$posts_templates array_merge($posts_templates$this->templates);
    return 
$posts_templates;
  }

  public function 
register_project_templates($atts)
  {
    
// Create the key used for the themes cache
    
$cache_key 'page_templates-' md5(get_theme_root() . '/' get_stylesheet());

    
// Retrieve the cache list. 
    // If it doesn't exist, or it's empty prepare an array
    
$templates wp_get_theme()->get_page_templates();
    if (empty(
$templates)) {
      
$templates = array();
    }

    
// New cache, therefore remove the old one
    
wp_cache_delete($cache_key'themes');

    
// Now add our template to the list of templates by merging our templates
    // with the existing templates array from the cache.
    
$templates array_merge($templates$this->templates);

    
// Add the modified cache to allow WordPress to pick it up for listing
    // available templates
    
wp_cache_add($cache_key$templates'themes'1800);

    return 
$atts;
  }

  public function 
view_project_template($template)
  {
    
// Get global post
    
global $post;

    
// Return template if post is empty
    
if (!$post) {
      return 
$template;
    }

    
// Return default template if we don't have a custom one defined
    
if (
      !isset(
$this->templates[get_post_meta(
        
$post->ID,
        
'_wp_page_template',
        
true
      
)])
    ) {
      return 
$template;
    }

    
$file plugin_dir_path(__FILE__) . get_post_meta(
      
$post->ID,
      
'_wp_page_template',
      
true
    
);

    
// Just to be safe, we check if the file exist first
    
if (file_exists($file)) {
      return 
$file;
    } else {
      echo 
$file;
    }

    
// Return template
    
return $template;
  }
}

add_action('plugins_loaded', array('DreamTeamPageTemplater''get_instance'));