%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/eirtvhdf/cloudsslamllc.com/wp-content/plugins/mstore-api/templates/
Upload File :
Create Path :
Current File : //home/eirtvhdf/cloudsslamllc.com/wp-content/plugins/mstore-api/templates/class-templater.php

<?php
/**
 * Add custom ( page and post type ) templates with plugins.
 *
 * Here i improved the @source class 'PageTemplater':
 * - handle class methods and added new functionality.
 * - you can now define your 'Templater' $settings and $templates outside the class.
 * - you can override final custom template file using filter outside the class
 *   @see  Templater.php#L386 or see details in README.md
 * - create composer package.
 * - support any post type cusom template.
 *
 * - new updated copyright:
 * @package   Templater
 * @author    mohamdio [jozoor.com]
 * @link      https://github.com/mohamdio/wp-templater
 * @copyright 2017 mohamdio [jozoor.com]
 * @license   GPL-2.0+
 * @version   1.0.0
 *
 * - source copyright:
 * @package   page-templater
 * @author    wpexplorer
 * @link      https://github.com/wpexplorer/page-templater
 * @copyright 2017 wpexplorer
 * @license   GPL-2.0+
 * @version   1.1.0
 *
 * @since  1.0.0
 */
class Templater
{

    /**
     * Reference to the root directory path of this plugin.
     *
     * for example: YOUR_PLUGIN_DIR or plugin_dir_path(__FILE__).
     *
     * @since 1.0.0
     * @access protected
     * @var string
     */
    protected $plugin_directory;
    /**
     * Plugin prefix for filter names.
     *
     * for example: 'my_plugin_'
     *
     * @since 1.0.0
     * @access protected
     * @var string
     */
    protected $plugin_prefix;
    /**
     * Directory name where templates are found in the plugin.
     *
     * for example: 'templates' or 'includes/templates'.
     *
     * @since 1.0.0
     * @access protected
     * @var string
     */
    protected $p_template_directory;
    /**
     * The array of templates that this plugin tracks.
     *
     * @since 1.0.0
     * @access protected
     * @var array
     */
    protected $templates;

    /**
     * Setup templater.
     *
     * $settings = array(
     *     'plugin_directory'          => plugin_dir_path(__FILE__),
     *     'plugin_prefix'             => 'plugin_prefix_',
     *     'p_template_directory' => 'templates', // or 'templates/sub-folder'
     * );
     *
     * @since 1.0.0
     * @access public
     * @param array $settings
     */
    public function __construct($settings = array())
    {

        // set templater settings
        if (!empty($settings) || is_array($settings)) {

            // set plugin directory
            if (isset($settings['plugin_directory'])) {
                $this->plugin_directory = $settings['plugin_directory'];
            }

            // set plugin prefix
            if (isset($settings['plugin_prefix'])) {
                $this->plugin_prefix = $settings['plugin_prefix'];
            }

            // set plugin template directory
            if (isset($settings['p_template_directory'])) {
                $this->p_template_directory = $settings['p_template_directory'];
            }

        }

    }

    /**
     * Add and set our templates.
     *
     * $templates = array(
     *     'post_type' => array(
     *         'template_file.php' => 'template_name',
     *         'sub-folder/template_file.php' => 'template_name',
     *     ),
     * );
     *
     * @since 1.0.0
     * @access public
     * @param array $templates
     * @return self
     */
    public function add($templates = array())
    {

        // get current WP version
        global $wp_version;

        // return the object if something wrong
        if (!is_array($templates)) {
            return $this;
        }

        /**
         * Handle our new templates.
         */

        // save new templates
        $new_templates = array();

        // handle templates for WP version 4.6 and older
        if (version_compare($wp_version, '4.7', '<')) {

            foreach ($templates as $custom_templates) {

                if (!empty($custom_templates) && is_array($custom_templates)) {

                    // merge all post types templates
                    foreach ($custom_templates as $template_file => $template_name) {
                        $new_templates[$template_file] = $template_name;
                    }

                }

            } // end foreach $templates

        } else {
            // handle templates for WP version 4.7 and later

            // pass array as normal
            $new_templates = $templates;

        } // end check WP version

        // set our new templates
        $this->templates = $new_templates;

        // return the object
        return $this;

    }

    /**
     * Register all our new templates.
     *
     * now we actually will add all this new templates.
     *
     * @since 1.0.0
     * @access public
     */
    public function register()
    {

        // get current WP version
        global $wp_version;

        /**
         * Add a filter to the attributes metabox to inject template into the cache.
         */

        // for WP version 4.6 and older
        if (version_compare($wp_version, '4.7', '<')) {

            add_filter(
                'page_attributes_dropdown_pages_args', array($this, 'register_templates')
            );

        } else {
            // for WP version 4.7 and later

            // add filter per post type
            foreach (array_keys($this->templates) as $post_type) {
                add_filter(
                    'theme_' . $post_type . '_templates', array($this, 'add_new_template')
                );

            }

        } // end check WP version

        /**
         * Add a filter to the save post to inject out template into the page cache.
         */
        add_filter(
            'wp_insert_post_data', array($this, 'register_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_template')
        );

    }

    /**
     * Adds our template to the page dropdown for v4.7+.
     *
     * @since 1.0.0
     * @access public
     * @param array $posts_templates
     * @return array
     */
    public function add_new_template($posts_templates)
    {

        // get new templates per post type
        $new_templates = array();
        foreach ($this->templates as $post_type => $custom_templates) {

            // we are in exact post type?
            if ($post_type === get_post_type()) {
                $new_templates = $custom_templates;
            }

        }

        // merge our new templates with default templates
        $posts_templates = array_merge($posts_templates, $new_templates);

        // return default with new templates
        return $posts_templates;

    }

    /**
     * Adds our template to the pages cache in order to trick WordPress
     * into thinking the template file exists where it doens't really exist.
     *
     * @since 1.0.0
     * @access public
     * @param  aray $atts attributes metabox
     * @return array
     */
    public function register_templates($atts)
    {

        // create the key used for the themes cache
        $cache_key = 'page_templates-' . hash('sha256', 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;

    }

    /**
     * Checks if the template is assigned to the page.
     *
     * @since 1.0.0
     * @access public
     * @param  string $template current default template
     * @return string
     */
    public function view_template($template)
    {

        // get current WP version
        global $wp_version;

        /**
         * return the search template if we're searching
         * (instead of the template for the first result)
         */
        if (is_search()) {
            return $template;
        }

        // get global post
        global $post;

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

        /**
         * Handle templates array upon wp version.
         */

        // save our new templates
        $new_templates = array();

        // for WP version 4.6 and older
        if (version_compare($wp_version, '4.7', '<')) {

            // pass array as normal
            $new_templates = $this->templates;

        } else {
            // for WP version 4.7 and later

            // add new templates per post type
            foreach ($this->templates as $post_type => $custom_templates) {

                // we are in exact post type?
                if ($post_type === get_post_type()) {
                    $new_templates = $custom_templates;
                }

            }

        } // end check WP version

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

        /**
         * Set our new custom template.
         *
         * we apply_filters() here, so we can override this plugin template in themes,
         * or plugins also by using this filter:
         * add_filter('{plugin_prefix_}override_plugin_custom_template', 'override_plugin_custom_template');
         * and inside this function 'override_plugin_custom_template'
         * you can change any or update any custom template
         *
         * function override_plugin_custom_template($template_file) {}
         *
         * whatever this filter is (optional).
         */
        $plugin_template = apply_filters(
            // filter tag name: {plugin_prefix_}override_plugin_custom_template'
            $this->plugin_prefix . 'override_plugin_custom_template',
            // full path of custom template file: $template_file
            $this->plugin_directory . $this->p_template_directory . '/' . get_post_meta($post->ID, '_wp_page_template', true)
        );

        // our new plugin template exists? use it
        if (WP_Filesystem_Base()->is_file($plugin_template)) {
            return $plugin_template;
        }

        // return default template
        return $template;

    }

}

Zerion Mini Shell 1.0