Как создать шаблон страницы из плагина, чтобы появился выбор в атрибутах страницы

Дополнение к третьему способу для статьи 3 способа создать шаблон страницы

1 Вариант: с единственным шаблоном

add_filter( 'theme_page_templates', 'my_plugin_template' );
add_filter( 'template_include', 'my_plugin_template_to_page' );

function my_plugin_template( $templates ) {

	// выбор шаблона в атрибутах
	$templates['full-page.php'] = 'Full Page';

	return $templates;
}

function my_plugin_template_to_page( $template ) {

	// запрашиваем активный шаблон текущей страницы
	$page_template = get_page_template_slug();

	// сравнение активного шаблона и шаблона выбранного в атрибутах
	if ( 'full-page.php' == basename( $page_template ) ) {

		// подключение шаблона, если выбран 'Full Page'
		return wp_normalize_path( WP_PLUGIN_DIR . '/mland/templates/full-page.php' );

	}

	return $template;
}

2 Вариант: с несколькими шаблонами в одной папке плагина

Имя шаблона в атрибутах автоматически становится вида: My Template.

add_filter( 'theme_page_templates', 'my_plugin_template' );
add_filter( 'template_include', 'my_plugin_template_to_page' );

## выбор шаблонов из плагина в атрибутах страницы
function my_plugin_template( $templates ) {

	## сканируем папку шаблонов в плагине
	// define( 'ML_TEMPLATES_DIR', WP_PLUGIN_DIR . '/my-plugin/templates' );
	$array_templates = array_diff( scandir( ML_TEMPLATES_DIR ), array('.', '..') );

	foreach( $array_templates as $plugin_template ) {

		$str_template = str_replace( ".php", "", $plugin_template ); // очищаем от .php

		$str_template = str_replace( "-", " ", $str_template ); // очищаем от "-"

		// Выводим имя в формате: My Template
		$template_name = mb_convert_case( $str_template, MB_CASE_TITLE, 'UTF-8' );

		// Подключаем выбор шаблона в атрибутах
		$templates[ $plugin_template ] = $template_name;

	}

	return $templates;

}

## подключение шаблонов из плагина
function my_plugin_template_to_page( $template ) {

	// запрашиваем активный шаблон текущей страницы
	$page_template = get_page_template_slug();

	## подключение шаблонов
	// сканируем папку с шаблонами
	$mland_templates = array_diff( scandir( ML_TEMPLATES_DIR ), array('.', '..') );

	foreach( $mland_templates as $mland_template ) {

		// сравнение активного шаблона и шаблона выбранного в атрибутах
		if ( $mland_template == basename ( $page_template ) ) {

			// подключение шаблона
			return wp_normalize_path( ML_TEMPLATES_DIR . '/' . $mland_template );

		}

	}

	return $template;
}

--

Заметка создана из комментария.