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

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

04.01.2019

990

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

// 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 — название шаблона.

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

  • Похожие записи
  • Комментарии
  • Вложения
Форма голосования (опросы)

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

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

Запись на прием

Запись на прием

Внедряем в сайт функционал записи на прием. Данная возможность может пригодится в медицинской сфере, а также в сфере образования (репетиторство). Плагин Booked Appointments Плагин платный (59 $), но если хорошо Читать далее »

/
Плагин Posts 2 Posts

Плагин Posts 2 Posts

Плагин Posts 2 Posts создает функционал связей многие ко многим (many-to-many). Плагин может использоваться для самых разнообразных задач. Posts 2 Posts После установки плагина, в админке не будет никаких управляющих Читать далее »

/

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

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

Шаблон страницы из плагина
Добавить файл к профилю пользователя
Рекомендации для васДобавить файл к профилю пользователяOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.