Esiste un plug-in WordPress che registra un file plug-in come modello di pagina personalizzato?


9

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?


Non capisco bene la domanda. Vuoi un plug-in che inserisca modelli personalizzati definiti nel plug-in?
Steven,

Risposte:


7

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.


Testerà roba da meta-box, bus come da mia risposta - è solo una parte del problema, altro è - codice che tenta di caricare il modello solo se si trova nella directory dei temi. Pertanto, fornire un file modello "esterno" potrebbe non essere sufficiente per caricarlo.
Rarst

ecco perché ho suggerito di fare in modo che il plugin creasse i file nella directory del tema.
Bainternet,

2

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 è:

  1. Crea un nuovo modello di pagina nella tua directory dei temi ATTIVI (crea una copia di page.php).

  2. Cambia il nome del modello (all'interno del file).

    / * Nome modello: pagina a larghezza intera * /

  3. Cambia il codice della pagina in quello che stai cercando di ottenere.

  4. Ora puoi creare una nuova pagina e scegliere quale "Modello" usare.

testo alternativo

...

Spero che sia quello che stai cercando di ottenere?

Documentazione ufficiale qui: http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates


Woops. il codice PHP di esempio è un po 'incasinato. Visita il link per un esempio di codice corretto.
Lars Koudal,

2
Interessato a sapere se qualcuno sta usando il metodo di Jan in un plugin esistente: wordpress.stackexchange.com/questions/3396/…
jnthnclrk

Credo che @trnsfrmr stia cercando un modo per creare un modello di pagina predefinito (passaggi 1-3) all'interno del proprio plugin per rendere questo modello disponibile per gli utenti dopo l'attivazione del plugin. Suppongo che voglia mantenere indipendente questo tema di soluzione.
Michal Mau,

Ah, va bene, ho frainteso un po 'lì, grazie per il chiarimento :-)
Lars Koudal

2

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.


1

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:

http://core.trac.wordpress.org/ticket/15803


Esaminerò il codice (probabilmente domani), ma per quanto ricordo i modelli con nomi vengono cercati esplicitamente solo attraverso le costanti del percorso.
Rarst
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.