Crie modelos de página personalizados com plugins?

50

É possível disponibilizar modelos de página personalizados a partir de um plug-in?

    
por jnthnclrk 28.10.2010 / 19:04
fonte

3 respostas

65

get_page_template() pode ser substituído por meio do page_template filter. Se o seu plugin é um diretório com os modelos como arquivos neles, é apenas uma questão de passar os nomes desses arquivos. Se você quiser criá-los "on the fly" (editá-los na área de administração e salvá-los no banco de dados?), Você pode querer gravá-los em um diretório de cache e referir-se a eles, ou conectar-se a template_redirect e faça algumas coisas loucas com eval() .

Um exemplo simples para um plug-in que "redireciona" para um arquivo no mesmo diretório de plug-ins, se um determinado critério for verdadeiro:

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;
}
    
por Jan Fabry 02.11.2010 / 14:52
fonte
13

Substituir get_page_template() é apenas um truque rápido. Ele não permite que o modelo seja selecionado na tela Admin e o slug da página é codificado no plug-in para que o usuário não tenha como saber de onde o modelo está vindo.

A solução preferida seria seguir este tutorial , que permite você registrar um modelo de página no back-end a partir do plug-in. Então funciona como qualquer outro modelo.

 /*
 * 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',
        );
}
    
por fireydude 12.10.2015 / 13:29
fonte
4

Sim, é possível. Eu encontrei este plug-in de exemplo muito útil.

Outra abordagem que me veio à cabeça é usar a API do WP Filesystem para criar o arquivo de modelo para o tema. Não tenho certeza se essa é a melhor abordagem, mas tenho certeza que funciona!

    
por KeepMove 04.12.2014 / 16:37
fonte