theme_(post_type)_templates хук-фільтрWP 3.9.0

Дозволяє додати/видалити шаблони для типів записів. Ці шаблони вибираються під час публікації запису в адмін-панелі.

Шаблони сторінок створюються за допомогою коментарів у файлі шаблону :

/*
 * Template Name: Мій шаблон сторінки
 * Template Post Type: post, page, product
 */

Цей фільтр дозволяє:

  • вказати шлях до файлу та ім’я шаблону, коли ОП не може знайти цей файл самостійно. Або якщо файл розташований у плагіні.
  • видалити файл шаблону зі списку вибору, коли, наприклад, шаблон є в темі, але його потрібно вимкнути.

Динамічна частина імені хука $post_type вказує на тип запису. Можливі імена хуків:

Використання

add_filter( 'theme_(post_type)_templates', 'wp_kama_theme_post_type_templates_filter', 10, 4);

/**
 * Function for `theme_(post_type)_templates` filter-hook.
 *
 * @param string[] $post_templates Array of template header names keyed by the template file name.
 * @param WP_Theme $theme The theme object.
 * @param WP_Post|null $post Це повідомлення, яке було виконано, передбачено для контексту, або null.
 * @param string $post_type Post type to get the templates for.
 *
 * @return string[]
 */
function wp_kama_theme_post_type_templates_filter( $post_templates, $theme, $post, $post_type ){

	// Filter...
	return $post_templates;
}
$post_templates
(string[])
Масив шаблонів у вигляді
ключ => значение. Ключ масиву вказує на шлях до файлу шаблону щодо папки теми, а в значенні вказується
Название шаблона, яке буде показано в адмін-панелі.
$theme
(WP_Theme)
Об’єкт теми –
WP_Theme .
$post
(WP_Post|null)
Об’єкт запису
WP_Post , для якого відображається список шаблонів.
$post_type
(рядок)
Тип запису, для якого відображається список шаблонів.

Приклади

0

#1 Додамо шаблон сторінки

Наприклад, у нас у темі є файл tpl/page/exchanges.php. Як видно файл шаблону лежить у папці tpl/page/– у цьому випадку ВП не впізнає цей файл як файл шаблону (бо ВП шукає файли шаблонів в корені теми і переглядає один рівень папок), але нам потрібно додати цей файл до списку можливих шаблонів при створенні/редагуванні запису:

// Додамо шаблон сторінки
add_filter( 'theme_page_templates', 'add_theme_page_templates');

function add_theme_page_templates( $templates ){

	$templates['tpl/page/exchanges.php'] = 'Exchange Template Page';

	return $templates;
}

Отримаємо у списку:


0

#2 Видалимо наявний шаблон сторінки зі списку

Допустимо тема створює шаблони, які ми не використовуватимемо. Видалимо ці шаблони зі списку:

// Видалимо наявний шаблон сторінки зі списку
add_filter( 'theme_page_templates', 'remove_theme_page_templates' );
add_filter( 'theme_post_templates', 'remove_theme_page_templates' );

function remove_theme_page_templates( $templates ) {

	unset( $templates['template-full-width-cover.php'] );
	unset( $templates['template-full-width.php'] );

	// файл у підпапці
	unset( $templates['template/only-content.php'] );

	return $templates;
}
0

#3 Фільтр шаблонів сторінок за ідентифікатором блогу

Припустимо, у вас є блог Food з id 2 і шаблон page-food.php, який повинен використовуватися тільки для цього блогу. Наведений нижче приклад видаляє шаблон сторінки зі списків інших блогів, що випадають:

add_filter( 'theme_page_templates', 'wpdocs_filter_theme_page_templates', 20, 3);

/**
 * Filter theme page templates.
 *
 * @param array $page_templates Page templates.
 * @param WP_Theme $this WP_Theme instance.
 * @param WP_Post $post The post being edited, призначений для контексту, або null.
 * @return array (Maybe) modified page templates array.
 */
function wpdocs_filter_theme_page_templates( $page_templates, $this, $post ) {

	$current_blog_id = get_current_blog_id();
	$food_blog_id = 2;

	if ( $current_blog_id != $food_blog_id ) {

		unset($page_templates['page-food.php']);
	}

	return $page_templates;
}
0

#4 Як додати файл шаблону теми з плагіна

Див. примітку: Як створити шаблон сторінки з плагіна .

список змін

З версії 3.9.0Введено.
З версії 4.4.0Наведений для повного контролю над $page_templates array .
З версії 4.7.0Added $post_type parameter.

Де викликається хук

wp-includes/class-wp-theme.php 1342

$post_templates = (array) apply_filters( "theme_{$post_type}_templates", $post_templates, $this, $post, $post_type );

Де використовується хук у WordPress

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *