Чи можна призначити файл шаблону користувальницькому типу публікації?
Я створив спеціальний тип публікації під назвою items
, і я хотів би призначити шаблони таким елементам, як ви можете робити зі сторінками.
Чи можна призначити файл шаблону користувальницькому типу публікації?
Я створив спеціальний тип публікації під назвою items
, і я хотів би призначити шаблони таким елементам, як ви можете робити зі сторінками.
Відповіді:
З WordPress версії 4.7 тепер ви можете призначити власні шаблони сторінок для інших типів публікацій разом зі сторінкою.
Щоб досягти цього, крім заголовка файлу Ім'я шаблону, типи публікацій, що підтримуються шаблоном, можна вказати, використовуючи Тип публікації шаблону:
<?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 -тип-шаблони-в-4-7 /
Ви можете створити шаблон для спеціальних типів публікацій, створивши файли, наприклад, наприклад:
single-mycustomposttype.php
Див. Ієрархію шаблонів у кодексі.
PS : на це вже відповіли.
Ось що для мене працює:
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
шаблон, якби він існував.
Для тих, хто доходить до цієї теми через Google, WP 4.7 представив шаблони для всіх типів публікацій. Див. Розділ Зробити WP Core для повного ознайомлення. Ви більше не обмежуєтесь одним шаблоном для всіх ваших CPT, ви можете призначити окремі шаблони публікацією за поштою так само, як це можна зробити зі Сторінками.
Це трохи старе, але ви також можете спробувати це:
Створіть шаблон для спеціального типу публікації:
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 );
?>
Замініть всі екземпляри користувальницького типу "post-type-slug " фактичним службовим кодом вашого спеціального типу публікації.
Я роблю це для зручності використання та організаційних цілей. Мені здається чистішим, ніж усі файли у кореневій папці теми.
Приклад структури папки:
themeroot
| |single-cases.php
|-templates
| --cases
| |default.php
| |case-one.php
| |case-two.php
Спочатку створіть на своїй сторінці назву "Елементи" за вашим бажанням, на якій відображається вміст із типів публікацій елементів, а потім створіть один файл шаблонів, як показано нижче, і назви цей елемент шаблону. Виберіть шаблон для створеної вами сторінки.
<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>
Це зробити дуже просто.
Створіть новий файл 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();?>
Ми розробили ще одне рішення, використовуючи спеціальний плагін для публікації шаблонів