Чи можу я призначити шаблон певному типу публікації?


35

Чи можна призначити файл шаблону користувальницькому типу публікації?

Я створив спеціальний тип публікації під назвою items, і я хотів би призначити шаблони таким елементам, як ви можете робити зі сторінками.


wpbeginner.com/wp-themes/… (це для публікацій, але ви можете змінити його для CPT) nathanrice.net/blog/wordpress-single-post-templates (це для публікацій, але ви можете змінити його для CPT) хороша ідея для плагіна.
Вік

Відповіді:


50

З 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 /


21

Ви можете створити шаблон для спеціальних типів публікацій, створивши файли, наприклад, наприклад:

single-mycustomposttype.php

Див. Ієрархію шаблонів у кодексі.

PS : на це вже відповіли.


2
Дякую за це, але те, що я хотів би знати, це чи можна додати спеціальні шаблони до спеціальних типів публікацій. Наприклад, чи можу я створити два шаблони і призначити кожен шаблон відповідному допису? Це дозволяє лише вказати один шаблон шаблону для обробки певного типу публікації, наскільки я його розумію.
Odyss3us

Зрозумійте, якщо вам потрібні різні шаблони для однієї публікації, ви можете створити кілька спеціальних типів публікацій відповідно до кожного необхідного шаблону. Я думаю, це залежить від того, скільки різних шаблонів вам потрібно. що ти збираєшся робити в шаблонах, які повинні бути різними для кожної публікації?
mike23

Ця відповідь застаріла. Дивіться відповідь Вінода Далві.
Саймон Іст

8

Ось що для мене працює:

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шаблон, якби він існував.


4

Для тих, хто доходить до цієї теми через Google, WP 4.7 представив шаблони для всіх типів публікацій. Див. Розділ Зробити WP Core для повного ознайомлення. Ви більше не обмежуєтесь одним шаблоном для всіх ваших CPT, ви можете призначити окремі шаблони публікацією за поштою так само, як це можна зробити зі Сторінками.


2

Це трохи старе, але ви також можете спробувати це:

Створіть шаблон для спеціального типу публікації:

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

1

Спочатку створіть на своїй сторінці назву "Елементи" за вашим бажанням, на якій відображається вміст із типів публікацій елементів, а потім створіть один файл шаблонів, як показано нижче, і назви цей елемент шаблону. Виберіть шаблон для створеної вами сторінки.

<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>

1

Це зробити дуже просто.

Створіть новий файл 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();?>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.