Могу ли я назначить шаблон для произвольного типа сообщения?
-
-
http://www.wpbeginner.com/wp-themes/create-custom-single-post-templates-for-specific-posts-or-sections-in-wordpress/(это для сообщений,но вы можете изменить его для CPT) http://www.nathanrice.net/blog/wordpress-single-post-templates/(это для сообщений,но вы можете изменить его для CPT) На самом деле это хорошая идея для плагина.http://www.wpbeginner.com/wp-themes/create-custom-single-post-templates-for-specific-posts-or-sections-in-wordpress/ ( this is for posts but you can modify it for CPT's) http://www.nathanrice.net/blog/wordpress-single-post-templates/ ( this is for posts but you can modify it for CPT's) It's a good idea for a plugin actually.
- 0
- 2011-07-22
- Wyck
-
8 ответ
- голосов
-
- 2017-04-23
Из WordPress версии 4.7 теперь вы можете назначать настраиваемые шаблоны страниц для других типов сообщений.вместе со страницей.
Для этого в дополнение к заголовку файла Template Name типы сообщений,поддерживаемые шаблоном,могут быть указаны с помощью Template Post Type: как показано ниже.
<?php /* Template Name: Full-width page layout Template Post Type: post, page, product */
Вы можете получить более подробную информацию об этом на следующих страницах.
https://wptavern.com/wordpress-4-7-brings-custom-page-template-functionality-to-all-post-types https://make.wordpress.org/core/2016/11/03/post-type-templates-in-4-7/
From WordPress version 4.7 you can now assign custom page templates to other post types along with page.
To achieve this in addition to the Template Name file header, the post types supported by a template can be specified using Template Post Type: as following.
<?php /* Template Name: Full-width page layout Template Post Type: post, page, product */
You can get more information about it on the following pages.
https://wptavern.com/wordpress-4-7-brings-custom-page-template-functionality-to-all-post-types https://make.wordpress.org/core/2016/11/03/post-type-templates-in-4-7/
-
- 2011-07-21
Вы можете создать шаблон для пользовательских типов сообщений,создав файлы,например:
single-mycustomposttype.php
См. иерархию шаблонов в кодексе.
You can create template for custom post types by creating files, like for example :
single-mycustomposttype.php
See Template Hierarchy in the codex.
PS : this has already been answered.
-
Спасибо за это,но я хотел бы знать,можно ли добавлять пользовательские шаблоны в пользовательские типы сообщений.Так,например,могу ли я создать два шаблона и назначить каждый шаблон соответствующей публикации?Это позволяет указать только один файл шаблона для обработки этого конкретного типа сообщения,насколько я понимаю.Thanks for that, but what I would like to know is if it is possible to add custom templates to custom post types. So for instance can I create two templates and assign each template to it's respective post? That only allows for specifying one template file to handle that specific post type as far as I understand it.
- 2
- 2011-07-21
- Odyss3us
-
Видите ли,если вам нужны разные шаблоны для отдельных сообщений,вы можете создать несколько настраиваемых типов сообщений в соответствии с каждым необходимым шаблоном.Думаю,это зависит от того,сколько разных шаблонов вам нужно.что вы собираетесь делать в шаблонах,которые должны отличаться в каждом посте?Is see, if you need different templates for single posts, you may want to create several custom post types, according to each needed template. I guess that depends on how many different templates you need. what are you going to do in the templates that needs to be different on each post ?
- 0
- 2011-07-22
- mike23
-
Этот ответ теперь устарел.См. Ответ Винода Далви.This answer is now out of date. See Vinod Dalvi's answer.
- 0
- 2017-09-12
- Simon East
-
Это не устарело.По-прежнему отлично работает и остается стандартной практикой.It is not out of date. Still works just fine and is still standard practice.
- 1
- 2020-03-01
- Tim Hallman
-
- 2015-06-11
Вот что мне подходит:
add_filter('single_template', function($original){ global $post; $post_name = $post->post_name; $post_type = $post->post_type; $base_name = 'single-' . $post_type . '-' . $post_name . '.php'; $template = locate_template($base_name); if ($template && ! empty($template)) return $template; return $original; });
Таким образом,с учетом сообщения произвольного типа сообщения
foobar
и фрагментаhello-world
приведенный выше код загрузитsingle-foobar-hello-world.php
,если он существует.Here's what works for me:
add_filter('single_template', function($original){ global $post; $post_name = $post->post_name; $post_type = $post->post_type; $base_name = 'single-' . $post_type . '-' . $post_name . '.php'; $template = locate_template($base_name); if ($template && ! empty($template)) return $template; return $original; });
Thus given a post of custom post type
foobar
and a slug ofhello-world
the above code would load thesingle-foobar-hello-world.php
template, if it existed. -
- 2017-03-08
Для тех,кто попадает в эту ветку через Google,WP 4.7 представил шаблоны для всех типов сообщений.См. Создание ядра WP для полного прохождения.Вы больше не ограничены одним шаблоном для всей вашей CPT,вы можете назначать отдельные шаблоны для публикации за публикацией,как вы это делаете со страницами.
For those reaching this thread through Google, WP 4.7 introduced templates for all post types. See Make WP Core for a full walkthrough. You're no longer restricted to one template for all of your CPT, you can assign individual templates post by post just like you can do with Pages.
-
- 2016-07-13
Это немного устарело,но вы также можете попробовать следующее:
Создайте шаблон для настраиваемого типа сообщения:
single-*custom-post-type-slug*.php
Файл должен проверить ярлык и проверить,существует ли файл,если нет,выполните возврат к файлу шаблона по умолчанию:
<?php $slug = get_post_field( 'post_name', get_post() ); $slug = ( locate_template( 'templates/*custom-post-type-slug*/' . $slug . '.php' ) ) ? $slug : 'default'; get_template_part( 'templates/*custom-post-type-slug*/' . $slug ); ?>
Замените все экземпляры custom-post-type-slug фактическими slug вашего настраиваемого типа сообщения.
Я делаю это для удобства использования и в организационных целях.Мне это кажется более чистым,чем наличие всех файлов в корневой папке темы.
пример структуры папок:
themeroot | |single-cases.php |-templates | --cases | |default.php | |case-one.php | |case-two.php
This is a little old but you can also try this:
Create a template for the custom post type:
single-*custom-post-type-slug*.php
The file should check the slug and verify if a file exists, if not, fallback to a default template file:
<?php $slug = get_post_field( 'post_name', get_post() ); $slug = ( locate_template( 'templates/*custom-post-type-slug*/' . $slug . '.php' ) ) ? $slug : 'default'; get_template_part( 'templates/*custom-post-type-slug*/' . $slug ); ?>
Replace all instances of custom-post-type-slug with the actual slug of your custom post type.
I do this for ease of use and organizational purposes. It seems cleaner to me than having all of the files in the theme's root folder.
example folder structure:
themeroot | |single-cases.php |-templates | --cases | |default.php | |case-one.php | |case-two.php
-
- 2015-07-13
Сначала создайте на странице с именем Items по вашему желанию,которая отображает контент из типов записей элементов,затем создайте один файл шаблона,как показано ниже,и назовите этот шаблон-элементы. Выберите этот шаблон для созданной страницы.
<div class="container"> <div class="row"> <div class="col-md-9"> <div class="panel panel-default text-center"> <?php $loop = new WP_Query( array( 'post_type' => 'items', 'posts_per_page' => 5 ) ); ?> <?php while ( $loop->have_posts() ) : $loop->the_post(); ?> <?php the_title();?> <?php if(has_post_thumbnail() ) { the_post_thumbnail(); } ?> <?php the_content();?> <?php endwhile; ?> <?php wp_reset_query(); ?> </div> </div> </div> </div>
First create on page named as Items as your wish which display the content from items post types, than create one template file as below and named that template-items. Select that template for the page you have created.
<div class="container"> <div class="row"> <div class="col-md-9"> <div class="panel panel-default text-center"> <?php $loop = new WP_Query( array( 'post_type' => 'items', 'posts_per_page' => 5 ) ); ?> <?php while ( $loop->have_posts() ) : $loop->the_post(); ?> <?php the_title();?> <?php if(has_post_thumbnail() ) { the_post_thumbnail(); } ?> <?php the_content();?> <?php endwhile; ?> <?php wp_reset_query(); ?> </div> </div> </div> </div>
-
- 2019-06-07
Это очень просто сделать.
Создайте новый файл PHP в корневом каталоге своей темы и добавьте его в начало:
<?php /* * Template Name: My custom view * Template Post Type: Post_typename // here you need to add the name of your custom post type */ ?>
Полный пример будет следующим:
<?php /* * Template Name: My custom view * Template Post Type: Post_typename // here you need to add the name of your custom post type */ ?> <?php get_header();?> <div class="container pt-5 pb-5"> <?php if (has_post_thumbnail()):?> <img src="<?php the_post_thumbnail_url('largest');?>" class="img-fluid"> <?php endif;?> <?php if (have_posts()) : while (have_posts()) : the_post();?> <?php the_content();?> <?php endwhile; endif;?> </div> <?php get_footer();?>
This is very simple to do.
Create a new PHP file in your theme root directory and add this to the top:
<?php /* * Template Name: My custom view * Template Post Type: Post_typename // here you need to add the name of your custom post type */ ?>
Full example will be as following:
<?php /* * Template Name: My custom view * Template Post Type: Post_typename // here you need to add the name of your custom post type */ ?> <?php get_header();?> <div class="container pt-5 pb-5"> <?php if (has_post_thumbnail()):?> <img src="<?php the_post_thumbnail_url('largest');?>" class="img-fluid"> <?php endif;?> <?php if (have_posts()) : while (have_posts()) : the_post();?> <?php the_content();?> <?php endwhile; endif;?> </div> <?php get_footer();?>
-
Могу ли я назначить файл шаблона для пользовательского типа сообщения?
Я создал собственный тип сообщения под названием
items
,и я хотел бы назначить шаблоны элементам,как вы можете делать со страницами.