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.
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.
Respuestas:
Al igual que Rarst respondió, realmente puede hacer eso sin editar archivos principales o eliminar el metabox de atributos de la página y crear su uso con el mismo código con un poco de modificación. el código a continuación es el código para /admin/include/meta-boxes.php y agregué un comentario para mostrar dónde irían las opciones adicionales de plantilla de página:
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 esto es una solución en su caso, pero tuve un caso de smiler cuando necesitaba mostrar el tipo de publicación en un tema incorporado en el complemento y para eso utilicé add_filter('the_content', 'my-function');
y my-function creó la salida para mostrar.
Otra opción sería hacer que su 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 verificar por primera vez si el archivo existe
if(!file_exists( $file_name)){create_plugins_theme_file();}
Espero que uno de esto ayude.
No estoy completamente seguro de entender lo que estás tratando de lograr, al menos por qué querrías que un complemento lo haga.
El procedimiento normal para crear diferentes plantillas de página es:
Cree una nueva plantilla de página en su directorio de temas ACTIVE (haga una copia de page.php).
Cambie el nombre de la plantilla (dentro del archivo).
/ * Nombre de la plantilla: página de ancho completo * /
Cambie el código de la página a lo que está tratando de lograr.
Ahora puede ir a crear una nueva página y elegir qué "Plantilla" usar.
...
Espero que eso sea lo que intentas lograr.
Documentación oficial aquí: http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates
Esto parece ser bastante difícil de lograr. get_page_templates()
La función descarta activamente todo lo que no se encuentra en los directorios raíz padre e hijo. Tampoco se almacena en una variable global ni permite filtrar la lista generada de plantillas.
Creo que el cuadro meta de atributos de página deberá bifurcarse y reemplazarse por completo 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 porque quiere que las plantillas con nombre solo provengan del directorio del tema.
¿No es esta una de las razones que register_theme_directory()
se introdujo?
http://core.trac.wordpress.org/ticket/10467
En ese momento era un problema relacionado con BuddyPress, que quería incluir plantillas adicionales aquí y allá.
Sin embargo, supongo que no figuran correctamente como plantillas de página: