답변:
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;
}
재정의 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',
);
}
네 가능합니다. 이 예제 플러그인이 매우 유용 하다는 것을 알았습니다 .
내 머리 속에 들어오는 또 다른 접근 방식은 WP Filesystem API 를 사용하여 테마 파일 템플릿 파일을 만드는 것입니다. 나는 그것이 최선의 접근 방법인지 확신하지 못하지만 그것이 효과가 있다고 확신합니다!
이전 답변 중 어느 것도 내 일을하고 있지 않았습니다. 다음은 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;
}