Devo creare un plug-in che renda disponibili modelli di pagina personalizzati in wp-admin. Mi chiedo se qualcuno lo abbia già affrontato, dato che sembra un processo abbastanza tipico?
Devo creare un plug-in che renda disponibili modelli di pagina personalizzati in wp-admin. Mi chiedo se qualcuno lo abbia già affrontato, dato che sembra un processo abbastanza tipico?
Risposte:
Come Rarst ha risposto, puoi davvero farlo senza modificare i file core o rimuovere gli attributi di pagina metabox e crearne uno usando lo stesso codice con un po 'di modifiche. il codice qui sotto è il codice per /admin/include/meta-boxes.php e ho aggiunto un commento per mostrare dove andrebbero le opzioni del modello di pagina extra:
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
}
Non so se questa è una correzione nel tuo caso, ma ho avuto un caso smiler quando avevo bisogno di visualizzare il tipo di post in un tema integrato nel plug-in e per questo ho usato add_filter('the_content', 'my-function');
e la mia funzione ha creato l'output da visualizzare.
Un'altra opzione sarebbe quella di far creare al tuo plugin il file modello nella directory del tema corrente, qualcosa del genere:
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 puoi eseguirlo dopo aver prima verificato se il file esiste
if(!file_exists( $file_name)){create_plugins_theme_file();}
Spero che uno di questi aiuti.
Non sono del tutto sicuro di capire cosa stai cercando di ottenere, almeno perché vorresti che un plugin lo facesse.
La normale procedura per la creazione di diversi modelli di pagina è:
Crea un nuovo modello di pagina nella tua directory dei temi ATTIVI (crea una copia di page.php).
Cambia il nome del modello (all'interno del file).
/ * Nome modello: pagina a larghezza intera * /
Cambia il codice della pagina in quello che stai cercando di ottenere.
Ora puoi creare una nuova pagina e scegliere quale "Modello" usare.
...
Spero che sia quello che stai cercando di ottenere?
Documentazione ufficiale qui: http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates
Questo sembra essere abbastanza difficile da realizzare. get_page_templates()
La funzione elimina attivamente tutto ciò che non si trova nelle directory principali padre e figlio. Inoltre, non memorizza in variabili globali né consente di filtrare l'elenco di modelli generato.
Penso che la meta box degli attributi di pagina dovrà essere biforcuta e completamente sostituita per questo. E non sono sicuro che sarà possibile anche allora.
Sono d'accordo che questo sembra qualcosa di sensato, ma il codice WordPress è molto preciso in quanto vuole che i modelli denominati provengano solo dalla directory del tema.
Fare questo non è uno dei motivi che sono register_theme_directory()
stati introdotti?
http://core.trac.wordpress.org/ticket/10467
All'epoca si trattava di un problema relativo a BuddyPress, che voleva inserire modelli extra qua e là.
Presumo che non siano correttamente elencati come modelli di pagina, sebbene: