Шаблоны (страниц и записей) дают широкие возможности для создания гибкого и разнообразного дизайна, реализации различных вариантов верстки. С версии 4.7 шаблоны доступны и для записей.
Про подключение шаблона страницы или записи из плагина написано здесь.
Шаблоны страниц
Чтобы создать шаблон страницы надо создать php файл (в файлах темы) и в начале кода поместить следующее:
<?php /*Template Name: Название шаблона*/ ?>
После этого стандартный код шаблона страницы.
Также в шаблоны можно помещать различные функции, чтобы они были доступны по определенному url. т.е. создаем шаблон (update.php) и присваиваем его странице с url site.ru/update/. Теперь при переходе по данному url будет срабатывать функционал заложенный в данном шаблоне.
Шаблоны записей — плагин (до версии WP 4.7)
Для того чтобы такая же возможность была и у записей надо установить плагин Custom Post Template. После этого создать файл single-название_шаблона.php и в начале поместить запись
<?php
/*
Template Name Posts: Запись без форматирования
*/
?>
Можно добавлять эту строку под строкой названия шаблона у страниц. Тогда шаблон будет универсальным.
Добавление выбора произвольного шаблона записей в плагин ACF (произвольные поля)
Надо добавить код в functions.php
// Поддержка произвольных шаблонов записей плагином ACF
// Get post templates
function get_post_templates(){
$theme = wp_get_theme();
$post_templates = array();
$files = (array) $theme->get_files( 'php', 1 );
foreach ( $files as $file => $full_path ) {
$headers = get_file_data( $full_path, array( 'Template Name Posts' => 'Template Name Posts' ) );
if ( empty( $headers['Template Name Posts'] ) )
continue;
$post_templates[ $file ] = $headers['Template Name Posts'];
}
return $post_templates;
}
// Add custom post template rule to dropdown
add_filter('acf/location/rule_types', 'acf_location_rules_types');
function acf_location_rules_types( $choices ){
$choices['Post']['cpt'] = 'Post Template';
return $choices;
}
// Add custom post template names to value dropdown
add_filter('acf/location/rule_values/cpt', 'acf_location_rules_values_cpt');
function acf_location_rules_values_cpt( $choices ){
$templates = get_post_templates();
foreach($templates as $k => $v){
$choices[$k] = $v;
}
return $choices;
}
// Match location rule and show ACFs
add_filter('acf/location/rule_match/cpt', 'acf_location_rules_match_cpt', 10, 3);
function acf_location_rules_match_cpt( $match, $rule, $options ){
global $post;
if(isset($options['cpt'])){
$current_post_template = $options['cpt'];
}else{
$current_post_template = get_post_meta($post->ID,'custom_post_template',true);
}
$selected_post_template = $rule['value'];
if($rule['operator'] == "=="){
$match = ( $current_post_template == $selected_post_template );
}elseif($rule['operator'] == "!="){
$match = ( $current_post_template != $selected_post_template );
}
return $match;
}
// Add js to admin header to trigger ACFs
add_action('admin_head', 'acf_custom_post_template_js');
function acf_custom_post_template_js() {
echo "<script>jQuery('#custom_post_template').live('change', function(){ acf.screen['cpt'] = jQuery(this).val(); jQuery(document).trigger('acf/update_field_groups');});</script> \n";
}
Чтобы выбор шаблонов предлагался и в пользовательских типах записей в плагине в файле custom-post-templates.php нужно дополнить строку (через запятую slug’и пользовательских типов записей)
$post_types = apply_filters( 'cpt_post_types', array( 'post', 'track' ) );
Шаблоны записей (c WP 4.7)
Теперь шаблоны распространяются и на записи. Надо под названием шаблона, добавить необходимы тип записи, в том числе page.
<?php
/*
Template Name: Запись с табами
Template Post Type: post, page
*/
?>
Тем самым в WP с версии 4.7 появилась единая система шаблонов. К тому же она без проблем функционирует с плагином ACF.
Преобразовать страницы в записи
Преобразовать страницы в записи и наоборот (в товары или другие пользовательские типы записей) можно с помощью плагина Post Type Switcher (70 000).
[site-socialshare]