사용자 정의 포스트 유형 플러그인 : 템플릿을 어디에 두어야합니까?


11

맞춤 게시물 유형 플러그인을 작성 중입니다. 그것의 일부는 짧은 코드를 통해 템플릿으로 출력하고 있습니다. 그러나 다른 부분에는 사용자 지정 게시물 템플릿이 필요하며 CPT에 템플릿 계층을 사용하는 방법을 알아 냈습니다. 그러나 사용자 정의 템플릿은 테마에 있으며 플러그인은 적어도 시작하기 전에 독립적이어야한다고 생각합니다.

가장 좋은 방법은 무엇입니까? CPT 플러그인에 템플릿 파일을 어떻게 포함합니까? 이것이 어떻게 수행되는지에 대한 좋은 예를 말해 줄 수 있습니까?

당신의 도움을 주셔서 감사합니다.



1
중복인지 확실하지 않지만 주관적인 질문입니다. 나에게 가장 좋은 방법은 테마가 처리하도록하는 것입니다. 다른 사람에게 모범 사례는 플러그인을 완전히 독립적으로 만드는 것입니다.
chrisguitarguy

@JohannesPille 물어보기 전에 검색했습니다. 그러나 링크 주셔서 감사합니다. 내가 조사 할게
악명 높은 웹 마스터

1
@chrisguitarguy 동의합니다. 테마를 처리하게하는 문제는 테마를 바꾸는 경우 플러그인을 수용하기 위해 약간의 사용자 정의를 수행해야한다는 것입니다. 그렇지 않으면, 우리는 CPT가 파티에 가져 오는 것들을 잃어 버립니다.
악명 높은 웹 마스터

답변:


8

가장 좋은 방법은 무엇입니까?

테마를 처리하고 플러그인에 기본값을 제공하는 조합을 말하고 싶습니다.

single_template필터를 사용 하여 템플릿을 전환 할 수 있습니다 . 콜백에서 테마가 게시물 유형에 대한 템플리트를 제공했는지 확인하십시오 (있는 경우).

<?php
add_filter('single_template', 'wpse96660_single_template');
function wpse96660_single_template($template)
{
    if ('your_post_type' == get_post_type(get_queried_object_id()) && !$template) {
        // if you're here, you're on a singlar page for your costum post 
        // type and WP did NOT locate a template, use your own.
        $template = dirname(__FILE__) . '/path/to/fallback/template.php';
    }
    return $template;
}

이 방법이 가장 좋습니다. "템플릿 태그"의 사운드 세트를 제공과 결합 (예. the_content, the_title) 당신이 어떤 사운드 기본값과 함께 최종 사용자에게 맞춤 많은 힘을 줄 어떤 사용자 정의 귀하의 게시물 종류와 함께 간다 데이터를하고 지원. Bbpress는 이런 종류의 작업을 매우 잘 수행합니다. 사용자 템플릿을 찾은 경우 포함하고 많은 템플릿 태그를 제공합니다.

또는 the_content필터 와 함께 콜백을 사용 하고 내용 자체에서 내용을 변경하면됩니다.

<?php
add_filter('the_content', 'wpse96660_the_content');

function wpse96660_the_content($content)
{
    if (is_singular('your_post_type') && in_the_loop()) {
        // change stuff
        $content .= '<p>here we are on my custom post type</p>';
    }

    return $content;
}

나는 깨끗한 해결책이 없다는 @toscho에 동의합니다. 그러나 카테고리 태그 세트를 제공한다는 개념이 마음에 듭니다. 궁극적으로 플러그인에 샘플 CPT 템플릿과 함께 테마 폴더가 있으며 사용자가 자신의 환경에 맞게 조정할 것을 권장합니다. 또한 the_content 필터가 마음에 듭니다. 그 이유는 사용자 레이아웃 내에 내 콘텐츠를 연결하기 때문입니다. 두 가지를 모두 구현하고 사용자가 옵션 토글을 사용하는 방법을 선택할 수 있습니다.
악명 높은 웹 마스터

3

template_include게시물 유형에 대한 요청 인 경우 플러그인 파일에 연결하여 반환 할 수 있습니다.

add_filter( 'template_include', 'insert_my_template' );

function insert_my_template( $template )
{
    if ( 'my_post_type' === get_post_type() )
        return dirname( __FILE__ ) . '/template.php';

    return $template;
}

그러나 이것은 모양을 크게 바꿀 것입니다. 여전히 깨끗한 해결책은 없습니다.


네, 맞습니다. 레이아웃, 위젯 등을 포함한 모양을 바꿀 것입니다. 내 취향에 너무 과격하다. 하지만 고마워
악명 높은 웹 마스터
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.