Plugin Templating all'interno di WordPress

Quando si tratta di creare un tipo di post personalizzato all'interno di un plug-in di WordPress, c'è sempre lo stesso problema: è necessario creare un'abitudine singolo [cpt_slug] .php file nella cartella del tema se non si desidera utilizzare l'impostazione predefinita single.php file dal tuo tema.

In questo post mi piacerebbe coprire due aspetti dell'utilizzo di modelli personalizzati. Il primo passo è mostrare che possiamo usare un file personalizzato contenuto direttamente nel plugin stesso invece di caricare il default single.php, e il secondo è come creare il tuo file personalizzato nella cartella del tema.

Molti plug-in come Easy Digital Download o Shopp utilizzano questo metodo: il plug-in verifica se si definisce un modello personalizzato nella cartella del tema, se è il caso, il file viene caricato, altrimenti viene caricato il file del modello di plug-in predefinito. In entrambi i casi il tema è predefinito single.php il file non è caricato.


Definisci il plugin e la sua struttura

Il primo passo è creare un plugin, chiamiamolo "Scelta modelli". Creare un "template-chooser"cartella sotto / Wp-content / plugins /, con la seguente struttura:

La struttura del plugin

Quindi apri il file principale template-choose.php e inserisci il seguente codice di intestazione del plug-in:

/ * Nome plugin: Modello CPT URL del plug-in di Chooser: http://wp.tutsplus.com/ Descrizione: Carica un file modello personalizzato invece del default single.php Versione: 0.1 Autore: Remi Corson Autore URI: http: // wp .tutsplus.com / * /

Definire le costanti del plugin

Più tardi nel plugin avremo bisogno di recuperare facilmente l'URL del plugin e il suo percorso, ecco perché abbiamo bisogno di definire alcune costanti:

 / * | ----------------------------------------------- --------------------------- | COSTANTI | ------------------------------------------------ -------------------------- * / if (! defined ('RC_TC_BASE_FILE')) define ('RC_TC_BASE_FILE', __FILE__); if (! defined ('RC_TC_BASE_DIR')) define ('RC_TC_BASE_DIR', dirname (RC_TC_BASE_FILE)); if (! defined ('RC_TC_PLUGIN_URL')) define ('RC_TC_PLUGIN_URL', plugin_dir_url (__FILE__));

Registra un tipo di messaggio personalizzato

Per andare oltre, dobbiamo impostare un nuovo tipo di post personalizzato, creiamo un "testimoniale"CPT, con alcuni supporti e funzionalità di base. Poiché l'obiettivo del post non è quello di insegnare come creare un tipo di post personalizzato, userò un codice piuttosto semplice diviso in 3 parti: le etichette del tipo di post personalizzato, i supporti e gli argomenti del tipo di post personalizzati. Tutto ciò che incorpora in una singola funzione:

 / * | ----------------------------------------------- --------------------------- | DEFINIRE IL TIPO DI ALBERO PERSONALIZZATO | -------------------------------------------- ------------------------------ * / / ** * Testimonianze dell'installazione Tipo di messaggio personalizzato * * @since 1.0 * / function rc_tc_setup_post_types () // Etichette dei tipi di post personalizzati $ labels = array ('name' => esc_html __ ('Testimonials', 'rc_tc'), 'singular_name' => esc_html __ ('Testimonial', 'rc_tc'), 'add_new' = > esc_html __ ('Aggiungi nuovo', 'rc_tc'), 'add_new_item' => esc_html __ ('Aggiungi nuovo testimonial', 'rc_tc'), 'edit_item' => esc_html __ ('Modifica testimonianza', 'rc_tc'), 'new_item '=> esc_html __ (' Nuovo Testimonial ',' rc_tc '),' view_item '=> esc_html __ (' Visualizza Testimonial ',' rc_tc '),' search_items '=> esc_html __ (' Cerca Testimonial ',' rc_tc '),' not_found '=> esc_html __ (' Nessuna testimonianza trovata ',' rc_tc '),' not_found_in_trash '=> esc_html __ (' Nessuna testimonianza trovata nel cestino ',' rc_tc '),' parent_item_colon '=> "); // Supporta $ support = array ('title', 'editor'); // Custom Post Type Supporta $ args = array ('labels' => $ labels, 'public' => true, 'public_queryable' => true, 'show_ui' => true, 'query_var' => true, 'can_export' => true, 'rewrite' => array ('slug' => 'testimonials', 'with_front' => true ), 'capability_type' => 'post', 'hierarchical' => false, 'menu_position' => 25, 'supports' => $ supports, 'menu_icon' => RC_TC_PLUGIN_URL. '/includes/images/testimonials_icon.png', // puoi impostare qui la tua icona); // Infine registra il tipo di post personalizzato "testimonial" register_post_type ('testimonial', $ args);  add_action ('init', 'rc_tc_setup_post_types');

Non usare il valore predefinito single.php File

Ora che il nostro tipo di post personalizzato è registrato, dobbiamo creare una funzione che dirà WordPress non usare il valore predefinito single.php dal tema.

Perché sì di default quando si visualizza un tipo di post personalizzato sul frontend WordPress controllerà se un file chiamato single-testimonial.php esiste e lo caricherà. In caso contrario, cercherà il single.php. Ma non vogliamo usare nessuno di loro.

Vogliamo che WordPress carichi un file personalizzato dal plugin. Per fare ciò, dobbiamo agganciare una nuova funzione al "template_include"filtro. In questa funzione lo scopo è quello di verificare il tipo di post e agire di conseguenza:

 / * | ----------------------------------------------- --------------------------- | FILTRI | ------------------------------------------------ -------------------------- * / add_filter ('template_include', 'rc_tc_template_chooser'); / * | ----------------------------------------------- --------------------------- | FUNZIONI DI PLUGIN | ----------------------------------------------- --------------------------- * / / ** * Restituisce il file template * * @since 1.0 * / function rc_tc_template_chooser ($ template)  // ID post $ post_id = get_the_ID (); // Per tutti gli altri CPT se (get_post_type ($ post_id)! = 'Testimonial') return $ template;  // Altrimenti usa il modello personalizzato if (is_single ()) return rc_tc_get_template_hierarchy ('single'); 

Carica il modello giusto

Come puoi vedere, sulla linea 33 chiamiamo una nuova funzione rc_tc_get_template_hierarchy (). Questa è la funzione che controllerà se WordPress deve caricare il file personalizzato dal plugin o il modello dalla cartella del tema.

Tieni presente che quando parlo del "modello dalla cartella dei temi", sto parlando di un file personalizzato caricato al posto di single.php.

Supponiamo che tu non voglia caricare il modello incluso nel plugin ma creare il tuo modello personalizzato, tutto ciò che devi fare è creare una nuova cartella nella cartella del tema, nominarla "plugin_template"e all'interno di questa cartella crea a single.php file. Questo sarà il tuo nuovo predefinito single.php caricato solo per le testimonianze visualizzate sul frontend.

Sei ancora con me? Ok, quindi creiamo la funzione:

 / ** * Ottieni il modello personalizzato se è impostato * * @sulla 1.0 * / funzione rc_tc_get_template_hierarchy ($ modello) // Ottieni il template slug $ template_slug = rtrim ($ template, '.php'); $ template = $ template_slug. '.Php'; // Controlla se esiste un modello personalizzato nella cartella del tema, altrimenti carica il file del modello del plugin if ($ theme_file = locate_template (array ('plugin_template /'. $ Template))) $ file = $ theme_file;  else $ file = RC_TC_BASE_DIR. "/ include / templates /". $ Template;  return apply_filters ('rc_repl_template_'. $ template, $ file);  / * | ---------------------------------------------- ---------------------------- | FILTRI | ------------------------------------------------ -------------------------- * / add_filter ('template_include', 'rc_tc_template_chooser');

Il modello di default del plugin

Ora crea una nuova testimonianza nell'amministrazione. Quindi apri include / templates / single.php e quindi copia e incolla questo semplice codice:

  siamo nel file personalizzato del plugin 

Se visualizzi la testimonianza sul frontend dovresti vedere "siamo nel file personalizzato del plugin". Questo è quello che volevamo. Ma se il file modello del plugin non soddisfa le tue esigenze o se desideri semplicemente creare un design più personale, puoi creare un file nella cartella del tema.


Il modello di default del tema

Per creare un modello personalizzato che non usi quello predefinito dal plugin, puoi creare una nuova cartella chiamata "plugin_templates"nella cartella dei temi. Crea un nuovo file chiamato single.php e inserisci questo codice:

  siamo nel file personalizzato del tema 

Conclusione

Quindi cosa abbiamo fatto esattamente? Bene, abbiamo creato un plug-in che registra un tipo di messaggio personalizzato "testimoniale"Abbiamo raggiunto la funzionalità per caricare un file personalizzato memorizzato nella cartella del plugin al posto del valore predefinito single.php o single-testimonial.php file dalla cartella del tema. Siamo anche riusciti a caricare un file personalizzato invece dalla cartella del tema che si trova sotto "plugin_templates".

Perché è bello? Perché quando crei il tuo plugin puoi fornire un modello predefinito per visualizzare il tipo di post personalizzato in modo da dare la possibilità all'utente finale di utilizzare il proprio modello o meno.