¿Crear plantillas de página personalizadas con complementos?

50

¿Es posible hacer que las plantillas de página personalizadas estén disponibles desde un complemento?

    
pregunta jnthnclrk 28.10.2010 - 19:04

3 respuestas

65

get_page_template() se puede anular a través del page_template filtro. Si su complemento es un directorio con las plantillas como archivos en ellas, es solo cuestión de pasar los nombres de estos archivos. Si desea crearlos "sobre la marcha" (¿editarlos en el área de administración y guardarlos en la base de datos?), Es posible que desee escribirlos en un directorio de caché y referirse a ellos, o conectarlos a template_redirect y haz algo loco eval() stuff.

Un ejemplo simple para un complemento que "redirige" a un archivo en el mismo directorio de complementos si un cierto criterio es verdadero:

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

Anular get_page_template() es solo un truco rápido. No permite seleccionar la plantilla desde la pantalla de Administración y la barra de la página está codificada en el complemento para que el usuario no tenga forma de saber de dónde proviene la plantilla.

La solución preferida sería seguir este tutorial que permite para registrar una plantilla de página en el back-end desde el complemento. Entonces funciona como cualquier otra plantilla.

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

Sí, es posible. Encontré este complemento de ejemplo muy útil.

Otro enfoque que se me viene a la cabeza es utilizar API del sistema de archivos WP para crear el archivo de plantilla para el tema. No estoy seguro de que sea el mejor enfoque a seguir, pero estoy seguro de que funciona.

    
respondido por el KeepMove 04.12.2014 - 16:37

Lea otras preguntas en las etiquetas