Preciso criar um plug-in que disponibilize modelos de página personalizados no wp-admin. Gostaria de saber se alguém já resolveu isso, já que parece um processo bastante típico?
Preciso criar um plug-in que disponibilize modelos de página personalizados no wp-admin. Gostaria de saber se alguém já resolveu isso, já que parece um processo bastante típico?
Respostas:
Como Rarst respondeu, você pode realmente fazer isso sem editar os arquivos principais ou remover o metabox dos atributos da página e criar seu código usando o mesmo código com algumas modificações. o código abaixo é o código para o /admin/include/meta-boxes.php e adicionei um comentário para mostrar onde suas opções extras de modelo de página seriam:
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
}
Não sei se isso é uma correção no seu caso, mas eu tive um caso smiler quando precisei exibir o tipo de postagem em um tema embutido de plug-in e, para isso, usei add_filter('the_content', 'my-function');
e minha função criou a saída a ser exibida.
Outra opção seria fazer o seu plugin criar o arquivo de modelo no diretório de temas atual, algo como isto:
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);
}
e você pode executar isso depois de verificar primeiro se o arquivo existe
if(!file_exists( $file_name)){create_plugins_theme_file();}
Espero que isso ajude.
Não sei ao certo o que você está tentando alcançar, pelo menos por que você deseja que um plug-in faça isso.
O procedimento normal para criar modelos de página diferentes é:
Crie um novo modelo de página no diretório de temas ATIVO (faça uma cópia do page.php).
Mude o nome do modelo (dentro do arquivo).
/ * Nome do modelo: página de largura total * /
Mude o código da página para o que você está tentando alcançar.
Agora você pode criar uma nova página e escolher qual "Modelo" usar.
...
Espero que seja isso que você está tentando alcançar?
Documentação oficial aqui: http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates
Isso parece ser bastante difícil de alcançar. get_page_templates()
A função descarta ativamente qualquer coisa que não esteja localizada nos diretórios raiz pai e filho. Também não armazena na variável global ou permite filtrar a lista de modelos gerada.
Acho que a meta-caixa de atributos da página precisará ser bifurcada e completamente substituída para isso. E não tenho certeza se será possível mesmo assim.
Concordo que isso parece algo que faz sentido, mas o código do WordPress é muito preciso, pois quer que os modelos nomeados venham apenas do diretório do tema.
Não está fazendo isso uma das razões que register_theme_directory()
foram introduzidas?
http://core.trac.wordpress.org/ticket/10467
Na época, era um problema relacionado ao BuddyPress, que queria lançar modelos extras aqui e ali.
Entendo que eles não estão listados corretamente como modelos de página: