¿Existe un complemento de WordPress que registre un archivo de complemento como una plantilla de página personalizada?

9

Necesito crear un complemento que haga que las plantillas de página personalizadas estén disponibles en wp-admin. Me pregunto si alguien ya ha abordado esto, ya que parece un proceso bastante típico.

    
pregunta jnthnclrk 16.11.2010 - 19:02

4 respuestas

7

Al igual que Rarst respondió, realmente puedes hacerlo sin editar los archivos principales o eliminar el metabox de atributos de la página y crear el mismo código con un poco de modificación. El código a continuación es el código para el /admin/include/meta-boxes.php y agregué un comentario para mostrar dónde irían las opciones de plantilla de página adicional:

function page_attributes_meta_box($post) {
    $post_type_object = get_post_type_object($post->post_type);
    if ( $post_type_object->hierarchical ) {
        $pages = wp_dropdown_pages(array('post_type' => $post->post_type, 'exclude_tree' => $post->ID, 'selected' => $post->post_parent, 'name' => 'parent_id', 'show_option_none' => __('(no parent)'), 'sort_column'=> 'menu_order, post_title', 'echo' => 0));
        if ( ! empty($pages) ) {
        ?>
        <p><strong><?php _e('Parent') ?></strong></p>
        <label class="screen-reader-text" for="parent_id"><?php _e('Parent') ?></label>
        <?php echo $pages; ?>
        <?php
        } // end empty pages check
    } // end hierarchical check.
    if ( 'page' == $post->post_type && 0 != count( get_page_templates() ) ) {
        $template = !empty($post->page_template) ? $post->page_template : false;
        ?>
        <p><strong><?php _e('Template') ?></strong></p>
        <label class="screen-reader-text" for="page_template"><?php _e('Page Template') ?></label><select name="page_template" id="page_template">
        <option value='default'><?php _e('Default Template'); ?></option>
        <?php page_template_dropdown($template); ?>

        // add your page templates as options

        </select>
        <?php
    } ?>
    <p><strong><?php _e('Order') ?></strong></p>
    <p><label class="screen-reader-text" for="menu_order"><?php _e('Order') ?></label><input name="menu_order" type="text" size="4" id="menu_order" value="<?php echo esc_attr($post->menu_order) ?>" /></p>
    <p><?php if ( 'page' == $post->post_type ) _e( 'Need help? Use the Help tab in the upper right of your screen.' ); ?></p>
    <?php
}

No sé si se trata de una solución en su caso, pero tuve un caso smiler cuando necesitaba mostrar el tipo de publicación en un tema integrado en el complemento y para eso usé add_filter('the_content', 'my-function'); y my-function creó la salida para mostrar.

Otra opción sería hacer que tu complemento cree el archivo de plantilla en el directorio del tema actual, algo como esto:

function create_plugins_theme_file(){
    $file_name = TEMPLATEPATH . '/' . $tamplate_name . '.php';
    $handle = fopen($file_name, 'w') or wp_die('Cannot open file for editing');
    $file_contents = <<<OUT
<?php
/*
Template Name: $tamplate_name
*/
?>

//you theme file here

OUT;

   fwrite($handle, $file_contents);
   fclose($handle);
 }

y puede ejecutar esto después de comprobar primero si el archivo existe

if(!file_exists( $file_name)){create_plugins_theme_file();}

Espero que una de estas ayudas.

    
respondido por el Bainternet 07.02.2011 - 20:42
2

No estoy del todo seguro de que entiendo lo que estás tratando de lograr, al menos por qué querrías que un complemento haga eso.

El procedimiento normal para crear diferentes plantillas de página es:

  1. Cree una nueva plantilla de página en su directorio de temas ACTIVOS (haga una copia de page.php).

  2. Cambia el nombre de la plantilla (dentro del archivo).

    / * Nombre de la plantilla: Página de ancho completo * /

  3. Cambie el código de la página a lo que está tratando de lograr.

  4. Ahora puedes crear una nueva página y elegir qué "Plantilla" usar.

...

Esperoqueseaesoloqueintentaslograr.

Documentaciónoficialaquí: enlace

    
respondido por el Lars Koudal 16.11.2010 - 19:20
2

Esto parece ser bastante difícil de lograr. La función get_page_templates() descarta activamente cualquier cosa que no se encuentre en los directorios raíz primarios y secundarios. Tampoco se almacena en una variable global ni permite filtrar la lista de plantillas generada.

Creo que los meta box de atributos de página necesitarán ser bifurcados y reemplazados completamente para esto. Y no estoy seguro de que sea posible incluso entonces.

Estoy de acuerdo en que esto parece algo que tiene sentido, pero el código de WordPress es muy preciso, ya que quiere que las plantillas con nombre solo provengan del directorio del tema.

    
respondido por el Rarst 23.01.2011 - 17:23
1

¿No está haciendo esto una de las razones por las que register_theme_directory() se introdujo?

enlace

En ese momento se trataba de un problema relacionado con BuddyPress, que quería lanzar plantillas adicionales aquí y allá.

Supongo que no están listados correctamente como plantillas de página, sin embargo:

enlace

    
respondido por el Denis de Bernardy 07.02.2011 - 21:02

Lea otras preguntas en las etiquetas