맞춤 게시물 유형에 템플릿을 할당 할 수 있습니까?


35

템플릿 파일을 맞춤 게시물 유형에 할당 할 수 있습니까?

이라는 사용자 정의 게시물 유형을 만들었 items으며 페이지에서 할 수있는 것처럼 항목에 템플릿을 지정하고 싶습니다.


wpbeginner.com/wp-themes/...는 (이 게시물입니다하지만 당신은 CPT의 그것을 수정할 수) nathanrice.net/blog/wordpress-single-post-templates 그것의 (이 게시물입니다하지만 당신은 CPT의 그것을 수정할 수 있습니다) 실제로 플러그인에 대한 좋은 아이디어입니다.
Wyck

답변:


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

코덱의 템플릿 계층 을 참조하십시오 .

추신 : 이것은 이미 답변되었습니다.


2
고맙지 만 알고 싶은 것은 사용자 정의 게시물 유형에 사용자 정의 템플릿을 추가 할 수 있는지 여부입니다. 예를 들어 두 개의 템플릿을 만들어 각 템플릿을 해당 게시물에 할당 할 수 있습니까? 내가 이해하는 한 특정 게시물 유형을 처리하기 위해 하나의 템플릿 파일 만 지정할 수 있습니다.
Odyss3us

단일 게시물에 대해 서로 다른 템플릿이 필요한 경우 필요한 각 템플릿에 따라 여러 개의 사용자 지정 게시물 유형을 만들 수 있습니다. 필요한 템플릿 수에 따라 다릅니다. 각 게시물마다 달라야하는 템플릿에서 무엇을 하시겠습니까?
mike23

이 답변은 이제 구식입니다. Vinod Dalvi의 답변을 참조하십시오.
Simon East

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

따라서 사용자 정의 게시물 유형의 게시물 foobarhello-world위 코드 의 슬러그가 있는 single-foobar-hello-world.php경우 템플릿 이로드 된 경우 템플릿을 로드합니다 .


4

Google을 통해이 스레드에 도달 한 사용자를 위해 WP 4.7은 모든 게시물 유형에 대한 템플릿을 도입했습니다. 전체 연습은 WP 코어 만들기를 참조하십시오 . 더 이상 모든 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  );
?>

custom-post-type-slug 의 모든 인스턴스를 사용자 정의 post type의 실제 슬러그로 교체하십시오 .

사용하기 쉽고 조직적인 목적으로이 작업을 수행합니다. 테마의 루트 폴더에 모든 파일을 갖는 것보다 나에게 더 깨끗해 보입니다.

폴더 구조 예 :

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.