Özel bir yazı tipine bir şablon dosyası atayabilir miyim?
Özel bir yazı tipi yarattım items
ve sayfalarda yapabileceğiniz gibi öğelere şablonlar atamak istiyorum.
Özel bir yazı tipine bir şablon dosyası atayabilir miyim?
Özel bir yazı tipi yarattım items
ve sayfalarda yapabileceğiniz gibi öğelere şablonlar atamak istiyorum.
Yanıtlar:
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 /
Ö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ı.
İş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 foobar
ve hello-world
yukarıdaki kodun bir parçası single-foobar-hello-world.php
verildiyse , şablonu yükleyecekti .
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.
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
Ö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>
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();?>
Özel gönderi şablonu eklentisini kullanarak başka bir çözüm bulduk