/ Сайтостроение / Плагины / Шаблоны страниц и записей

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

10.07.2015

962

Шаблоны (страниц и записей) дают широкие возможности для создания гибкого и разнообразного дизайна, реализации различных вариантов верстки. С версии 4.7 шаблоны доступны и для записей.

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

Чтобы создать шаблон страницы надо создать php файл и в начале поместить запись

<?php /*Template Name: Название шаблона*/ ?>

Шаблоны записей — плагин (до версии 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 " \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).

Поделится информацией с друзьями

  • Комментарии
  • Вложения

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

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

Карта на сайт
Рекомендации для васКарта на сайтOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.