Processors
4 years ago
QuranADay
4 years ago
StartTime
4 years ago
AdminMenu.php
6 years ago
AssetsLoader.php
4 years ago
CustomPluginSettings.php
4 years ago
DPTAjaxHandler.php
4 years ago
DSTemplateLoader.php
4 years ago
DailyShortCode.php
4 years ago
DigitalScreen.php
4 years ago
HijriDate.php
7 years ago
Init.php
4 years ago
MonthlyShortCode.php
4 years ago
MonthlyTimeTable.php
6 years ago
Shortcodes.php
4 years ago
UpdateStyles.php
7 years ago
Validator.php
4 years ago
db.php
4 years ago
dptWidget.php
4 years ago
DSTemplateLoader.php
100 lines
| 1 | <?php |
| 2 | class DSTemplateLoader |
| 3 | { |
| 4 | /** |
| 5 | * A reference to an instance of this class. |
| 6 | */ |
| 7 | private static $instance; |
| 8 | |
| 9 | /** |
| 10 | * The array of templates that this plugin tracks. |
| 11 | */ |
| 12 | protected $templates; |
| 13 | |
| 14 | /** |
| 15 | * Returns an instance of this class. |
| 16 | */ |
| 17 | public static function get_instance() { |
| 18 | |
| 19 | if ( null == self::$instance ) { |
| 20 | self::$instance = new DSTemplateLoader(); |
| 21 | } |
| 22 | |
| 23 | return self::$instance; |
| 24 | } |
| 25 | |
| 26 | /** |
| 27 | * Initializes the plugin by setting filters and administration functions. |
| 28 | */ |
| 29 | private function __construct() { |
| 30 | |
| 31 | $this->templates = array(); |
| 32 | |
| 33 | add_filter('page_attributes_dropdown_pages_args', array( $this, 'register_project_templates' ) ); |
| 34 | |
| 35 | add_filter( 'wp_insert_post_data', array( $this, 'register_project_templates' ) ); |
| 36 | |
| 37 | add_filter( 'template_include', array( $this, 'view_project_template' ) ); |
| 38 | |
| 39 | $this->templates = array( '../Views/DSTemplate.php' => 'Digital Screen Prayer Time', |
| 40 | '../Views/DPTFullWidth.php' => 'Full Width Monthly Prayer Time', ); |
| 41 | } |
| 42 | |
| 43 | |
| 44 | /** |
| 45 | * Adds our template to the pages cache in order to trick WordPress |
| 46 | * into thinking the template file exists where it doens't really exist. |
| 47 | * |
| 48 | */ |
| 49 | |
| 50 | public function register_project_templates( $atts ) { |
| 51 | |
| 52 | $theme = wp_get_theme(); |
| 53 | |
| 54 | $cache_key = 'page_templates-' . md5( $theme->get_theme_root() . '/' . $theme->get_stylesheet() ); |
| 55 | |
| 56 | $templates = $theme->get_page_templates(); |
| 57 | |
| 58 | $templates = array_merge( $templates, $this->templates ); |
| 59 | |
| 60 | wp_cache_set( $cache_key, $templates, 'themes', 300 ); |
| 61 | |
| 62 | add_filter( 'theme_page_templates', function( $page_templates ) use ( $templates ) { |
| 63 | return $templates; |
| 64 | }); |
| 65 | |
| 66 | return $atts; |
| 67 | |
| 68 | } |
| 69 | |
| 70 | /** |
| 71 | * Checks if the template is assigned to the page |
| 72 | */ |
| 73 | public function view_project_template( $template ) { |
| 74 | |
| 75 | global $post; |
| 76 | |
| 77 | if ( ! isset( $this->templates[ get_post_meta( |
| 78 | $post->ID, '_wp_page_template', true |
| 79 | ) ] ) |
| 80 | ) { |
| 81 | |
| 82 | return $template; |
| 83 | } |
| 84 | |
| 85 | $file = plugin_dir_path( __FILE__ ) . get_post_meta( $post->ID, '_wp_page_template', true ); |
| 86 | |
| 87 | if ( file_exists( $file ) ) { |
| 88 | return $file; |
| 89 | } else { |
| 90 | echo esc_attr( $file ); |
| 91 | } |
| 92 | |
| 93 | return $template; |
| 94 | |
| 95 | } |
| 96 | |
| 97 | } |
| 98 | |
| 99 | add_action( 'plugins_loaded', array( 'DSTemplateLoader', 'get_instance' ) ); |
| 100 |