/ Wordpress / Шаблон страницы из плагина

Шаблон страницы из плагина

HIT

04.01.2019

1628

Обычным способом добавить шаблон страницы или записи из плагина не получится. Для этого нужно создать класс:

// Add page template
class PageTemplater {

	private static $instance; // A reference to an instance of this class.

	protected $templates; // The array of templates that this plugin tracks.

	public static function get_instance() { // Returns an instance of this class. 

		if ( null == self::$instance ) {
			self::$instance = new PageTemplater();
		} 

		return self::$instance;

	} 

	private function __construct() { // Initializes the plugin by setting filters and administration functions.

		$this->templates = array();

		// Add a filter to the attributes metabox to inject template into the cache.
		if ( version_compare( floatval( get_bloginfo( 'version' ) ), '4.7', '<' ) ) {

			// 4.6 and older
			add_filter(
				'page_attributes_dropdown_pages_args',
				array( $this, 'register_project_templates' )
			);

		} else {

			// 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(
			'template-setquantity.php' => 'Request template for Set Quantity',
		);
			
	} 

	// Adds our template to the page dropdown for v4.7+
	public function add_new_template( $posts_templates ) {
		$posts_templates = array_merge( $posts_templates, $this->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.
	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;

	} 

	// Checks if the template is assigned to the page
	public function view_project_template( $template ) {
		
		global $post; // Get global post

		if ( ! $post ) { // Return template if post is empty
			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( 'PageTemplater', 'get_instance' ) );

При этом файл шаблона (template-setquantity.php) должен лежать в корне плагина. Request template for Set Quantity — название шаблона.

Поделиться в соц. сетях:

  • Похожие записи
  • Комментарии
  • Вложения
slick — функционал карусели

slick — функционал карусели

slick — комплексное решение по созданию функционала карусели, в различных ее проявлениях. Демо и типовые варианты, и исходники можно посмотреть/скачать здесь. Отсекаем лишнее В базовой комплектации у slick присутствует несколько Читать далее »

Изображение для категории товаров

Изображение для категории товаров

В дизайнерских целях иногда требуется выводить изображение для категории товаров. Сделать это можно несколькими способами: плагином, кодом в functions, либо дополнительными полями.При этом кодом в funtions описанном мы будем использовать Читать далее »

/
Форма голосования (опросы)

Форма голосования (опросы)

Создаем форму опроса по интересующему предмету. YOP Poll Еще один отличный плагин по созданию опросов. 20 000 скачиваний, но при этом 393 положительных оценки (у WP-Polls 117 оценок). В бесплатной Читать далее »

Добавить комментарий

Пока нет комментариев. Будь первым!

Шаблон страницы из плагина
Owl Carousel
Рекомендации для васOwl CarouselOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.