Часто справшивают, как сделать пост с индивидуальным оформлением, убрать в определенном посте сайдбар, и вообще сделать специальный пост, структура которого бы отличалась от всех остальных? Для решения таких задач существуют шаблоны – разные типы файлов темы, предназначенной для одной цели. Давайте создадим дополнительный шаблон для поста, чтобы при необходимости применить его, когда нужно вывести пост с индивидуальным оформлением и структурой, и подключим возможность выбора шаблона поста в редакторе.
Чтобы создать шаблон поста, скопируйте файл single.php с новым названием. Например, single-one.php.
Откройте файл single-one.php, и добавьте в него в самое начало, до всего остального кода строчки с названием шаблона (желательно на английском языке):
Дополнительный шаблон для одиночного поста под названием “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 '<label class="hidden" for="post_template">' . __("Шаблон поста", 'pt' ) . '</label><br />'; echo ''; echo 'Стандартный шаблон'; post_templates_dropdown(); //get the options echo '<br /><br />'; echo '<p>' . __("Некоторые темы имеют собственные шаблоны, которые можно использовать для одиночных постов. Они могут иметь дополнительные функции, или пользовательские макеты.", 'pt' ) . '</p><br />'; } 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”, откройте в админке редактор постов, и настройте экран, указав, что на экране должен отображаться бокс “Шаблон поста”.
После этого можете создавать запись и выбирать для нее новый шаблон.
Таким образом вы можете создать столько разных шаблонов для одиночного поста, сколько вам нужно.
P.S. В WordPress 3+ можно обойтись без пунктов 4 и 5.
Как? Поподробнее можно?
Выполняете пункты 1-3.
Создаете пост. Перед сохранением выбираете шаблон поста.
Либо можете выполнить все по инструкции с 1 по 5 пункты.
Все сделал точно по вашей инструкции – не появляется возможность выбрать шаблон.
В чём может быть ошибка?
Доброе утро! Все, очень тщательно сделала по вашей инструкции. Но нет возможности выбрать шаблон записи (поста). В панели Настройки экрана нет Надписи Шаблон поста
Скажите пожалуйста! Где еще можно что-то подправить, чтобы появилась такая возможность выбрать шаблон именно для ПОСТА (записи)
Спасибо!