Özel bir gönderi türüne bir şablon atayabilir miyim?


35

Özel bir yazı tipine bir şablon dosyası atayabilir miyim?

Özel bir yazı tipi yarattım itemsve sayfalarda yapabileceğiniz gibi öğelere şablonlar atamak istiyorum.


wpbeginner.com/wp-themes/… (bu mesajlar içindir ancak CPT'ler için değiştirebilirsiniz) nathanrice.net/blog/wordpress-single-post-templates (bu mesajlar içindir, ancak CPT'ler için değiştirebilirsiniz) aslında bir eklenti için iyi bir fikir.
Wyck

Yanıtlar:


50

Gönderen WordPress sürümü 4.7 yapabilirsiniz sayfayla birlikte başka sonrası türlerine artık atama özel sayfa şablonları.

Bunu Şablon Adı dosya başlığına ek olarak elde etmek için, bir şablon tarafından desteklenen posta tipleri, Şablon Posta Türü: kullanılarak aşağıdaki gibi belirlenebilir.

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

İlerleyen sayfalarda bu konuda daha fazla bilgi edinebilirsiniz.

https://wptavern.com/wordpress-4-7-brings-custom-page-template-functionality-to-all-post-types https://make.wordpress.org/core/2016/11/03/post tipi-şablonlar-in-4-7 /


21

Özel gönderi türleri için, örneğin, dosyalar oluşturarak şablon oluşturabilirsiniz:

single-mycustomposttype.php

Kodeks içindeki Şablon Hiyerarşisine bakınız .

Not : Bu zaten cevaplandı.


2
Bunun için teşekkürler, ama bilmek istediğim şey, özel yazı türlerine özel şablonlar eklemek mümkün olup olmadığıdır. Mesela iki şablon oluşturabilir ve her bir şablonu kendi gönderisine atayabilir miyim? Bu, yalnızca anlayabildiğim kadarıyla belirli bir yazı tipini işlemek için bir şablon dosyası belirlemenize izin verir.
Odyss3us,

Gördüğünüz gibi, tek gönderiler için farklı şablonlara ihtiyacınız varsa, gereken her şablona göre birkaç özel yazı türü oluşturmak isteyebilirsiniz. Sanırım bu kaç farklı şablona ihtiyacın olduğuna bağlı. Her yayında farklı olması gereken şablonlarda ne yapacaksınız?
mike23,

Bu cevap şimdi güncel değil. Vinod Dalvi'nin cevabını görün.
Simon Doğu

8

İşte benim için işe yarayanlar:

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

Bu nedenle, özel bir yazı tipi foobarve hello-worldyukarıdaki kodun bir parçası single-foobar-hello-world.phpverildiyse , şablonu yükleyecekti .


4

Bu konuya Google üzerinden ulaşanlar için, WP 4.7 tüm gönderi türleri için şablonlar oluşturdu. Tam bir adım için WP Çekirdeği Yapma bölümüne bakın . Artık tüm CPT'niz için tek bir şablonla sınırlı değilsiniz, tek tek şablonları postalayarak, tıpkı Sayfalarda olduğu gibi postayla atayabilirsiniz.


2

Bu biraz eski ama şunu da deneyebilirsiniz:

Özel gönderi türü için bir şablon oluşturun:

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

Dosya, fişi kontrol etmeli ve bir dosyanın var olup olmadığını varsayılan bir şablon dosyasına geri dönüp düşmediğini doğrulamalıdır:

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

Tüm özel post-type-slug örneklerini, özel post tipinizin gerçek sümüklü böcekleriyle değiştirin.

Bunu kullanım kolaylığı ve kurumsal amaçlar için yapıyorum. Bana göre tüm dosyaların temanın kök klasöründe olması daha temiz görünüyor.

örnek klasör yapısı:

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

1

Öncelikle aşağıdaki gibi bir şablon dosyası oluşturmak ve bu şablon öğelerini adlandırmak yerine, öğeleri gönderi türlerinden gelen içeriği görüntüleyen, İstekleriniz olarak adlandırılan sayfada oluşturun. Oluşturduğunuz sayfa için o şablonu seçin.

<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

Bunu yapmak çok basit.

Tema kök dizininizde yeni bir PHP dosyası oluşturun ve bunu en üste ekleyin:

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

Tam örnek aşağıdaki gibi olacaktır:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.