플러그인으로 맞춤 페이지 템플릿을 만드시겠습니까?


답변:


73

get_page_template()page_template필터 를 통해 재정의 할 수 있습니다 . 플러그인이 템플릿을 파일로 포함하는 디렉토리 인 경우 이러한 파일의 이름을 전달하기 만하면됩니다. "즉석에서"작성하려면 (관리 영역에서 편집하고 데이터베이스에 저장 하시겠습니까?),이를 캐시 디렉토리에 작성하고 참조하거나 연결하거나 template_redirect미친 eval()일을 할 수 있습니다 .

특정 기준이 참인 경우 동일한 플러그인 디렉토리의 파일로 "리디렉션"하는 플러그인의 간단한 예 :

add_filter( 'page_template', 'wpa3396_page_template' );
function wpa3396_page_template( $page_template )
{
    if ( is_page( 'my-custom-page-slug' ) ) {
        $page_template = dirname( __FILE__ ) . '/custom-page-template.php';
    }
    return $page_template;
}

Jan, 플러그인 파일을 커스텀 페이지 템플릿으로 전달하는 방법에 대한 예제 코드가 있습니까?
jnthnclrk

@ trnsfrmr : 정말 쉽습니다. 제 대답에 간단한 예를 추가했습니다.
Jan Fabry

10
이후 버전 (3.1+)에서는 "template_include"필터로 대체되었습니다.
Inigoesdr 2016 년

완벽 !!!, 당신은 내 시간을 @JanFabry 절약
Kishan Chauhan

@fireydude가 말했듯이 이것은 일반적인 해결책이 아닙니다. 페이지 슬러그를 하드 코딩하는 해결 방법입니다.
Mauro Colella

22

재정의 get_page_template()는 단지 빠른 해킹입니다. 관리 화면에서 템플릿을 선택할 수 없으며 페이지 슬러그가 플러그인에 하드 코딩되어 있으므로 사용자는 템플릿의 출처를 알 수 없습니다.

선호되는 솔루션이 학습서 를 따라 플러그인에서 백엔드에 페이지 템플리트를 등록 할 수 있도록하는 것입니다. 그런 다음 다른 템플릿과 같이 작동합니다.

 /*
 * Initializes the plugin by setting filters and administration functions.
 */
private function __construct() {
        $this->templates = array();

        // Add a filter to the attributes metabox to inject template into the cache.
        add_filter('page_attributes_dropdown_pages_args',
            array( $this, 'register_project_templates' ) 
        );

        // Add a filter to the save post to inject out template into the page cache
        add_filter('wp_insert_post_data', 
            array( $this, 'register_project_templates' ) 
        );

        // Add a filter to the template include to determine if the page has our 
        // template assigned and return it's path
        add_filter('template_include', 
            array( $this, 'view_project_template') 
        );

        // Add your templates to this array.
        $this->templates = array(
                'goodtobebad-template.php'     => 'It\'s Good to Be Bad',
        );
}

좋은 (수 있을까요 및 선호 당신이 그렇지 않으면이 비 대한 코멘트 :-)보다 더 아무것도 없다, 당신의 대답에있는 링크에서 관련 코드를 게시 할 수있는 경우)
피터 구센

이 튜토리얼은 실제로 Tom McFarlin의 사례 를이 접근법의 창시자로 여깁니다 .
fireydude

7

네 가능합니다. 이 예제 플러그인이 매우 유용 하다는 것을 알았습니다 .

내 머리 속에 들어오는 또 다른 접근 방식은 WP Filesystem API 를 사용하여 테마 파일 템플릿 파일을 만드는 것입니다. 나는 그것이 최선의 접근 방법인지 확신하지 못하지만 그것이 효과가 있다고 확신합니다!


링크 된 예제 플러그인은 문서화되어 있습니다. 나는 그것을 좋아한다. :)
Arvid

0

이전 답변 중 어느 것도 내 일을하고 있지 않았습니다. 다음은 Wordpress 관리자에서 템플릿을 선택할 수있는 곳입니다. 기본 PHP 플러그인 파일 template-configurator.php에 넣고 템플릿 이름으로 변경 하십시오.

//Load template from specific page
add_filter( 'page_template', 'wpa3396_page_template' );
function wpa3396_page_template( $page_template ){

    if ( get_page_template_slug() == 'template-configurator.php' ) {
        $page_template = dirname( __FILE__ ) . '/template-configurator.php';
    }
    return $page_template;
}

/**
 * Add "Custom" template to page attirbute template section.
 */
add_filter( 'theme_page_templates', 'wpse_288589_add_template_to_select', 10, 4 );
function wpse_288589_add_template_to_select( $post_templates, $wp_theme, $post, $post_type ) {

    // Add custom template named template-custom.php to select dropdown 
    $post_templates['template-configurator.php'] = __('Configurator');

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