Bisakah saya menetapkan templat ke jenis posting khusus?

35

Bisakah saya menetapkan file template ke jenis posting khusus?

Saya telah membuat jenis posting khusus yang disebut items, dan saya ingin menetapkan template untuk item seperti yang dapat Anda lakukan dengan halaman.

Odyss3us
sumber
wpbeginner.com/wp-themes/… (ini untuk posting tetapi Anda dapat memodifikasinya untuk CPT) nathanrice.net/blog/wordpress-single-post-templates (ini untuk posting tetapi Anda dapat memodifikasinya untuk CPT) Ini adalah Ide bagus untuk sebuah plugin sebenarnya.
Wyck

Jawaban:

50

Dari WordPress versi 4.7 Anda sekarang dapat menetapkan template halaman khusus untuk jenis posting lain bersama dengan halaman.

Untuk mencapai ini selain header file Templat Name, tipe posting yang didukung oleh templat dapat ditentukan menggunakan Tipe Post Templat: sebagai berikut.

<?php
/*
Template Name: Full-width page layout
Template Post Type: post, page, product
*/

Anda dapat memperoleh informasi lebih lanjut tentang hal itu di halaman-halaman berikut.

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 /

Vinod Dalvi
sumber
21

Anda dapat membuat template untuk jenis posting khusus dengan membuat file, seperti misalnya:

single-mycustomposttype.php

Lihat Templat Hierarki dalam kodeks.

PS : ini sudah dijawab.

mike23
sumber
2
Terima kasih untuk itu, tetapi yang ingin saya ketahui adalah apakah mungkin untuk menambahkan template khusus ke jenis posting kustom. Jadi misalnya, bisakah saya membuat dua templat dan menetapkan masing-masing templat ke posting masing-masing? Itu hanya memungkinkan untuk menentukan satu file templat untuk menangani jenis posting tertentu sejauh yang saya mengerti.
Odyss3us
Lihat, jika Anda membutuhkan template yang berbeda untuk posting tunggal, Anda mungkin ingin membuat beberapa jenis posting kustom, sesuai dengan masing-masing template yang diperlukan. Saya kira itu tergantung pada berapa banyak template yang Anda butuhkan. apa yang akan Anda lakukan dalam template yang harus berbeda pada setiap posting?
mike23
Jawaban ini sekarang kedaluwarsa. Lihat jawaban Vinod Dalvi.
Simon East
8

Inilah yang bekerja untuk saya:

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;
});

Dengan demikian diberi posting jenis posting khusus foobardan siput dari hello-worldkode di atas akan memuat single-foobar-hello-world.phptemplate, jika ada.

Chris Carson
sumber
4

Bagi mereka yang mencapai utas ini melalui Google, WP 4.7 memperkenalkan templat untuk semua jenis posting. Lihat Membuat WP Core untuk penelusuran lengkap. Anda tidak lagi terbatas pada satu templat untuk semua CPT Anda, Anda dapat menetapkan templat individual setiap posting seperti yang dapat Anda lakukan dengan Halaman.

WebElaine
sumber
2

Ini agak lama tetapi Anda juga dapat mencoba ini:

Buat template untuk jenis posting khusus:

single-*custom-post-type-slug*.php

File harus memeriksa siput dan memverifikasi apakah ada file, jika tidak, mundur ke file templat default:

<?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  );
?>

Ganti semua instance siput tipe-pos-kustom dengan siput aktual tipe posting khusus Anda.

Saya melakukan ini untuk kemudahan penggunaan dan tujuan organisasi. Tampaknya lebih bersih bagi saya daripada memiliki semua file di folder root tema.

contoh struktur folder:

themeroot
| |single-cases.php
|-templates
| --cases
|   |default.php
|   |case-one.php
|   |case-two.php
eballeste
sumber
1

Pertama buat pada halaman bernama Item sebagai keinginan Anda yang menampilkan konten dari item jenis posting, daripada membuat satu file template seperti di bawah ini dan beri nama item template itu. Pilih templat itu untuk halaman yang telah Anda buat.

<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>
tepuk
sumber
1

Ini sangat mudah dilakukan.

Buat file PHP baru di direktori root tema Anda dan tambahkan ini ke atas:

<?php /*
 * Template Name: My custom view
 * Template Post Type: Post_typename   // here you need to add the name of your custom post type
 */ ?>

Contoh lengkapnya adalah sebagai berikut:

<?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();?>
jerryurenaa
sumber