get_page_template_slug()
Получает название php файла, который установлен как шаблон для указанной записи (поста).
Если шаблон для записи не установлен, получит пустую строку.
Название файла шаблона находится в метаполе _wp_page_template (таблицы wp_postmeta). Если файл шаблона страницы расположен в подкаталоге, то значение будет такое:
folder-name/file-name.php
Произвольные поля начинающиеся с "_" не отображаются в админ-панели в блоке "произвольные поля". Такие названия считаются служебными в WordPress. Поэтому в админ-панели вы не увидите поле хранящее файл шаблона.
Хуков нет.
Возвращает
Строку|false.
Строку- Название файла шаблона.Пустую строку- когда для страницы не установлен никакой шаблон или его значение равно "default".false- когда пост не найден.
Использование
$page_template_slug = get_page_template_slug( $post_id );
- $post_id(число|WP_Post)
- ID страницы или объект WP_Post страницы, которую нужно проверить. По умолчанию: текущая запись в цикле (глобальной переменной $post).
По умолчанию: null
Примеры
#1 Выведем название шаблона страницы 123
echo get_page_template_slug( 123 ); //> file-name.php
Или можно передать сразу объект WP_Post - так будет работать немного быстрее:
$post = get_post( 123 ); // где-то выше в коде мы уже получили объект, // теперь просто передаем его echo get_page_template_slug( $post );
#2 Получим все посты с указанным файлом шаблона
Если нужно найти (получить) все страницы, которые работают под определенным файлом шаблона, то можно сделать такой запрос:
$template_filename = 'templates/offers.php'; $pages_with_template_filename = get_pages( [ 'meta_key' => '_wp_page_template', 'meta_value' => $template_filename ] );
Этот код вернет (array|false) список страниц, соответствующих имени шаблона страницы.
Часто бывает так, что внутри темы, которую вы создаете, вам нужно найти определенную страницу, которая работает под специальным пользовательским шаблоном, и что вам нужно динамически получить доступ к ее ID, содержимому, заголовку и т.д., такой код поможет сделать это.
Список изменений
| С версии 3.4.0 | Введена. |
| С версии 4.7.0 | Now works with any post type, not just pages. |
Код get_page_template_slug() get page template slug WP 6.9
function get_page_template_slug( $post = null ) {
$post = get_post( $post );
if ( ! $post ) {
return false;
}
$template = get_post_meta( $post->ID, '_wp_page_template', true );
if ( ! $template || 'default' === $template ) {
return '';
}
return $template;
}