Criar modelos de página personalizados com plugins?
4 respostas
- votos
-
- 2010-11-02
get_page_template ()
Pode ser substituídopormeio dofiltro . Se o seuplugin é um diretório com osmodelos como arquivosneles,é apenas uma questão depassar osnomes desses arquivos. Se você quiser criá-los "namosca" (edite-osna área de administradore salve-osnobanco de dados?),Vocêpode querergravá-losem um diretório de cachee se referir aeles ou conectaremmodelo_redirect
e faça alguns loucoseval ( )
coisas.Umexemplo simplespara umplugin que "redireciona"para um arquivonomesmo diretório deplugin se um determinado critériofor verdadeiro:
Add_Filter ('Page_Template','WPA3396_Page_Template'); Função WPA3396_Page_Template ($ Página_Template) { if (is_page ('my-custom-personalizado-slug')) { $ Página_Template=DirName (__file__). '/custom-page-template.php'; } Retornar $ Página_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; }
-
Ei Jan,vocêtem algum código deexemplo sobre comopassar um arquivo deplugin como ummodelo depáginapersonalizado?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: Émuitofácil,adicionei umexemplo simplespara aminha resposta.@trnsfrmr: It's really easy, I added a simple example to my answer.
- 0
- 2010-11-16
- Jan Fabry
-
Observe queissofoimais oumenos substituídopelofiltro "Template_Include"em versõesposteriores (3.1+).Note that this has been more or less replaced by the "template_include" filter in later versions (3.1+).
- 12
- 2013-06-10
- Inigoesdr
-
Perfeito !!!,vocêtem economizarmeutempo @janfabryPerfect !!!, you have save my time @JanFabry
- 0
- 2018-12-21
- Kishan Chauhan
-
Como afirmadopor @Fireydude,estanão é uma soluçãogenérica.É uma solução alternativa que os códigos difíceis dapágina slug.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
Substemital
get_page_template()
é apenas um hack rápido. Elenãopermite que omodelo seja selecionadonatela do administradore a sele dapágina seja codificada com dificuldadenopluginpara que o usuárionãotenha como saber onde omodeloestá vindo.A soluçãopreferida seria seguir estetutorial quepermite registrar ummodelo depáginanoback-end doplug-in. Entãofunciona como qualquer outromodelo.
/* * 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', ); }
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', ); }
-
Seria legal (*e preferido *) Se vocêpuderpostar o código relevante do linkem sua resposta,caso contrário,issonadamais é do que um comentárioinchado :-)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
-
Otutorial realmente créditos [Exemplo de Tom McFarlin] (https://github.com/tommcfarin/page-template-example) como o originador dessa abordagem.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
Sim,épossível.Eu acheiisso plugin deexemplo muito útil.
Outra abordagem que vemem minha cabeçaestá usando WP FileSystem API Para criar o arquivo demodelopara otema.Nãotenho certeza de que é amelhor abordagempara levar,mastenho certeza quefunciona!
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!
-
Oplugin deexemplo vinculado émesmobem documentado.Eugosto disso.:)The linked example plugin is even pretty well documented. I like that. :)
- 0
- 2017-08-14
- Arvid
-
- 2019-10-22
Nenhuma das respostas anterioresestavafuncionandopara aminha. Aqui um onde vocêpodeescolher seumodelono Admin do WordPress. Basta colocá-loem seu arquivophppluginprincipale alterartemplate-configurator.php
pelonome do seumodelo//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; }
Épossívelfazermodelos depáginapersonalizados disponíveisem umplugin?