Создание шаблона поста / Функция выбора шаблона для поста

Создание шаблона поста / Функция выбора шаблона для поста | n-wp.ru

Часто справшивают, как сделать пост с индивидуальным оформлением, убрать в определенном посте сайдбар, и вообще сделать специальный пост, структура которого бы отличалась от всех остальных? Для решения таких задач существуют шаблоны – разные типы файлов темы, предназначенной для одной цели. Давайте создадим дополнительный шаблон для поста, чтобы при необходимости применить его, когда нужно вывести пост с индивидуальным оформлением и структурой, и подключим возможность выбора шаблона поста в редакторе.

Чтобы создать шаблон поста, скопируйте файл single.php с новым названием. Например, single-one.php.

Создание шаблона поста / Функция выбора шаблона для поста (4)

Откройте файл single-one.php, и добавьте в него в самое начало, до всего остального кода строчки с названием шаблона (желательно на английском языке):


Создание шаблона поста / Функция выбора шаблона для поста (1)

Дополнительный шаблон для одиночного поста под названием “Single One” готов. Вы можете изменить его структуру, оформление, добавить и удалить элементы.

Теперь осталось подключить универсальную функцию, которая будет находить среди файлов темы те, которые помечены как шаблоны текстом “Single Post Template:” (пункт №2), и выводить их в виде выпадающего меню в редакторе. Для этого нужно добавить следующий код в файл functions.php:

if(!function_exists('get_post_templates')) {
function get_post_templates() {
$themes = get_themes();
$theme = get_current_theme();
$templates = $themes[$theme]['Template Files'];
$post_templates = array();
$base = array(trailingslashit(get_template_directory()), trailingslashit(get_stylesheet_directory()));
foreach ((array)$templates as $template) {
$template = WP_CONTENT_DIR . str_replace(WP_CONTENT_DIR, '', $template); 
$basename = str_replace($base, '', $template);
if (false !== strpos($basename, '/'))
continue;
$template_data = implode('', file( $template ));
$name = '';
if (preg_match( '|Single Post Template:(.*)$|mi', $template_data, $name))
$name = _cleanup_header_comment($name[1]);
if (!empty($name)) {
if(basename($template) != basename(__FILE__))
$post_templates[trim($name)] = $basename;
}
}
return $post_templates;
}}
if(!function_exists('post_templates_dropdown')) {
function post_templates_dropdown() {
global $post;
$post_templates = get_post_templates();
foreach ($post_templates as $template_name => $template_file) {
if ($template_file == get_post_meta($post->ID, '_wp_post_template', true)) { $selected = ' selected="selected"'; } else { $selected = ''; }
$opt = '' . $template_name . '';
echo $opt;
}
}}
add_filter('single_template', 'get_post_template');
if(!function_exists('get_post_template')) {
function get_post_template($template) {
global $post;
$custom_field = get_post_meta($post->ID, '_wp_post_template', true);
if(!empty($custom_field) && file_exists(TEMPLATEPATH . "/{$custom_field}")) { 
$template = TEMPLATEPATH . "/{$custom_field}"; }
return $template;
}}
add_action('admin_menu', 'pt_add_custom_box');
function pt_add_custom_box() {
if(get_post_templates() && function_exists( 'add_meta_box' )) {
add_meta_box( 'pt_post_templates', __( 'Шаблон поста', 'pt' ), 
'pt_inner_custom_box', 'post', 'normal', 'high' );
}
}
function pt_inner_custom_box() {
global $post;
echo '';
echo '
'; echo ''; echo 'Стандартный шаблон'; post_templates_dropdown(); //get the options echo '

'; echo '

' . __("Некоторые темы имеют собственные шаблоны, которые можно использовать для одиночных постов. Они могут иметь дополнительные функции, или пользовательские макеты.", 'pt' ) . '


'; } add_action('save_post', 'pt_save_postdata', 1, 2); function pt_save_postdata($post_id, $post) { if ( !wp_verify_nonce( $_POST['pt_noncename'], plugin_basename(__FILE__) )) { return $post->ID; } if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post->ID )) return $post->ID; } else { if ( !current_user_can( 'edit_post', $post->ID )) return $post->ID; } $mydata['_wp_post_template'] = $_POST['_wp_post_template']; foreach ($mydata as $key => $value) { if( $post->post_type == 'revision' ) return; $value = implode(',', (array)$value); if(get_post_meta($post->ID, $key, FALSE)) { update_post_meta($post->ID, $key, $value); } else { add_post_meta($post->ID, $key, $value); } if(!$value) delete_post_meta($post->ID, $key); } }

Чтобы сделать пост с индивидуальным оформлением, которое определяется кодом шаблона “Single One”, откройте в админке редактор постов, и настройте экран, указав, что на экране должен отображаться бокс “Шаблон поста”.

Создание шаблона поста / Функция выбора шаблона для поста (3)

После этого можете создавать запись и выбирать для нее новый шаблон.

Создание шаблона поста / Функция выбора шаблона для поста (2)

Таким образом вы можете создать столько разных шаблонов для одиночного поста, сколько вам нужно.

Автор tiaurus 2182 Articles
Являюсь создателем n-wp.ru — блога о WordPress для новичков. Мне интересно многое, поэтому еще я сделал 123-box.ru — блог о программах для Windows, и tiaurus.info — блог о красоте.

5 Комментарии

  1. Все сделал точно по вашей инструкции – не появляется возможность выбрать шаблон.

    В чём может быть ошибка?

  2. Доброе утро! Все, очень тщательно сделала по вашей инструкции. Но нет возможности выбрать шаблон записи (поста). В панели Настройки экрана нет Надписи Шаблон поста
    Скажите пожалуйста! Где еще можно что-то подправить, чтобы появилась такая возможность выбрать шаблон именно для ПОСТА (записи)
    Спасибо!

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*