플러그인으로 사용자 정의 페이지 템플릿을 만드시겠습니까?
4 대답
- 투표
-
- 2010-11-02
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()
can be overridden via thepage_template
filter. If your plugin is a directory with the templates as files in them, it's just a matter of passing the names of these files. If you want to create them "on the fly" (edit them in the admin area and save them in the database?), you might want to write them to a cache directory and refer to them, or hook intotemplate_redirect
and do some crazyeval()
stuff.A simple example for a plugin that "redirects" to a file in the same plugin directory if a certain criterium is true:
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,플러그인 파일을 사용자 정의 페이지 템플릿으로 전달하는 방법에 대한 예제 코드가 있습니까?Hey Jan, do you have some example code on how to pass a plugin file in as a custom page template?
- 0
- 2010-11-16
- jnthnclrk
-
@trnsfrmr : 정말 쉽습니다. 간단한 예를 제 답변에 추가했습니다.@trnsfrmr: It's really easy, I added a simple example to my answer.
- 0
- 2010-11-16
- Jan Fabry
-
이는 이후 버전 (3.1 이상)에서 "template_include"필터로 대체되었습니다.Note that this has been more or less replaced by the "template_include" filter in later versions (3.1+).
- 12
- 2013-06-10
- Inigoesdr
-
완벽합니다 !!!,당신은 내 시간을 절약했습니다 @JanFabryPerfect !!!, you have save my time @JanFabry
- 0
- 2018-12-21
- Kishan Chauhan
-
@fireydude가 언급했듯이 이것은 일반적인 솔루션이 아닙니다.페이지 슬러그를 하드 코딩하는 해결 방법입니다.As stated by @fireydude, this is not a generic solution. It's a workaround that hard-codes the page slug.
- 0
- 2019-07-07
- Mauro Colella
-
- 2015-10-12
get_page_template ()
재정의는 간단한 방법입니다. 관리자 화면에서 템플릿을 선택할 수 없으며 페이지 슬러그가 플러그인에 하드 코딩되어 있으므로 사용자는 템플릿의 출처를 알 수 없습니다.선호하는 솔루션 은 이 자습서 <를 따르는 것입니다./a> 플러그인의 백엔드에 페이지 템플릿을 등록 할 수 있습니다. 그런 다음 다른 템플릿처럼 작동합니다.
<사전> <코드> /* * 필터 및 관리 기능을 설정하여 플러그인을 초기화합니다. */ privatefunction __construct () { $this- > 템플릿=array (); //속성 메타 박스에 필터를 추가하여 템플릿을 캐시에 삽입합니다. add_filter ( 'page_attributes_dropdown_pages_args', 배열 ($this,'register_project_templates') ); //저장 게시물에 필터를 추가하여 페이지 캐시에 템플릿을 삽입합니다. add_filter ( 'wp_insert_post_data', 배열 ($this,'register_project_templates') ); //템플릿 포함에 필터를 추가하여 페이지에 //템플릿 할당 및 경로 반환 add_filter ( '템플릿 _ 포함', 배열 ($this,'view_project_template') ); //이 배열에 템플릿을 추가합니다. $this- > 템플릿=array ( 'goodtobebad-template.php'=> '나쁜 것이 좋다', ); }Overriding
get_page_template()
is just a quick hack. It does not allow the template to be selected from the Admin screen and the page slug is hard-coded into the plugin so the user has no way to know where the template is coming from.The preferred solution would be to follow this tutorial which allows you to register a page template in the back-end from the plug-in. Then it works like any other 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', ); }
-
답변의 링크에서 관련 코드를 게시 할 수 있다면 좋을 것입니다 (* 그리고 선호 *).Would be nice (*and prefered*) if you can post the relevant code from the link in your answer, otherwise this is nothing more than a bloated comment :-)
- 0
- 2015-10-12
- Pieter Goosen
-
이 자습서에서는 실제로 [Tom McFarlin의 예] (https://github.com/tommcfarlin/page-template-example)를이 접근 방식의 창시자로 간주합니다.The tutorial actually credits [Tom McFarlin's example](https://github.com/tommcfarlin/page-template-example) as the originator of this approach.
- 1
- 2015-10-12
- fireydude
-
- 2014-12-04
예,가능합니다.이 예제 플러그인 이 매우 유용하다는 것을 알았습니다.
내 머리 속에 떠오르는 또 다른 접근 방식은 WP Filesystem API 를 사용하여 템플릿 파일을 테마로 만드는 것입니다..이것이 최선의 접근 방법인지는 모르겠지만 효과가 있다고 확신합니다!
Yes, it is possible. I found this example plugin very helpful.
Another approach that is come into my head is using WP Filesystem API to create the template file to theme. I am not sure that it is the best approach to take, but I am sure it work!
-
링크 된 예제 플러그인도 꽤 잘 문서화되어 있습니다.나는 그것을 좋아한다.:)The linked example plugin is even pretty well documented. I like that. :)
- 0
- 2017-08-14
- Arvid
-
- 2019-10-22
이전 답변 중 어느 것도 저에게 효과가 없었습니다. 여기 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; }
None of the previous answers was working for mine. Here one where you can choose your template in Wordpress admin. Just put it in your main php plugin file and change
template-configurator.php
by your template name//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; }
플러그인에서 사용자 정의 페이지 템플릿을 사용할 수 있습니까?