Tôi có thể chỉ định một mẫu cho một loại bài tùy chỉnh?


35

Tôi có thể chỉ định một tệp mẫu cho một loại bài tùy chỉnh không?

Tôi đã tạo một loại bài đăng tùy chỉnh được gọi itemsvà tôi muốn gán mẫu cho các mục như bạn có thể làm với các trang.


wpbeginner.com/wp-theme/ ((đây là cho các bài đăng nhưng bạn có thể sửa đổi nó cho CPT) nathanrice.net/blog/wordpress-single-post-temsheet (đây là cho các bài đăng nhưng bạn có thể sửa đổi nó cho CPT) ý tưởng tốt cho một plugin thực sự.
Wyck

Câu trả lời:


50

Từ phiên bản WordPress 4.7, giờ đây bạn có thể gán các mẫu trang tùy chỉnh cho các loại bài đăng khác cùng với trang.

Để đạt được điều này ngoài tiêu đề tệp Tên mẫu, các loại bài đăng được hỗ trợ bởi một mẫu có thể được chỉ định bằng Loại bài đăng mẫu: như sau.

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

Bạn có thể nhận thêm thông tin về nó trên các trang sau.

https://wptavern.com/wordpress-4-7-brings-custom-page-template-feftality-to-all-post-types https://make.wordpress.org/core/2016/11/03/post -type-samples-in-4-7 /


21

Bạn có thể tạo mẫu cho các loại bài đăng tùy chỉnh bằng cách tạo tệp, ví dụ như:

single-mycustomposttype.php

Xem Phân cấp mẫu trong bộ mã.

PS : điều này đã được trả lời.


2
Cảm ơn vì điều đó, nhưng những gì tôi muốn biết là nếu có thể thêm các mẫu tùy chỉnh vào các loại bài đăng tùy chỉnh. Vì vậy, ví dụ tôi có thể tạo hai mẫu và gán từng mẫu cho bài đăng tương ứng không? Điều đó chỉ cho phép chỉ định một tệp mẫu để xử lý loại bài đăng cụ thể đó theo như tôi hiểu.
Odyss3us

Hãy xem, nếu bạn cần các mẫu khác nhau cho các bài đăng đơn lẻ, bạn có thể muốn tạo một số loại bài đăng tùy chỉnh, theo từng mẫu cần thiết. Tôi đoán điều đó phụ thuộc vào số lượng mẫu bạn cần. bạn sẽ làm gì trong các mẫu cần phải khác nhau trên mỗi bài viết?
mike23

Câu trả lời này đã hết hạn. Xem câu trả lời của Vinod Dalvi.
Simon East

8

Đây là những gì làm việc cho tôi:

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

Do đó, đưa ra một bài đăng của loại bài tùy chỉnh foobarvà một hello-worldđoạn mã ở trên sẽ tải single-foobar-hello-world.phpmẫu, nếu nó tồn tại.


4

Đối với những người tiếp cận chủ đề này thông qua Google, WP 4.7 đã giới thiệu các mẫu cho tất cả các loại bài đăng. Xem Make WP Core để biết hướng dẫn đầy đủ. Bạn không còn bị giới hạn trong một mẫu cho tất cả CPT của mình, bạn có thể chỉ định từng mẫu riêng lẻ theo bài đăng giống như bạn có thể làm với Trang.


2

Điều này hơi cũ nhưng bạn cũng có thể thử điều này:

Tạo một mẫu cho loại bài tùy chỉnh:

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

Tệp phải kiểm tra sên và xác minh xem có tồn tại tệp không, nếu không, hãy chuyển sang tệp mẫu mặc định:

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

Thay thế tất cả các trường hợp tùy chỉnh-bài-type-sên với sên thực tế của bài tùy chỉnh kiểu của bạn.

Tôi làm điều này để dễ sử dụng và mục đích tổ chức. Nó có vẻ sạch sẽ hơn đối với tôi khi có tất cả các tệp trong thư mục gốc của chủ đề.

cấu trúc thư mục ví dụ:

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

1

Đầu tiên tạo trên trang có tên là Mục theo mong muốn của bạn sẽ hiển thị nội dung từ các loại bài đăng của mục, hơn là tạo một tệp mẫu như bên dưới và đặt tên cho các mục mẫu đó. Chọn mẫu đó cho trang bạn đã tạo.

<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

Điều này rất đơn giản để làm.

Tạo một tệp PHP mới trong thư mục gốc của chủ đề của bạn và thêm tệp này vào đầu:

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

Ví dụ đầy đủ sẽ như sau:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.