Plugin Templating în WordPress

Când vine vorba de crearea unui Custom Post Type într-un plugin WordPress, există întotdeauna aceeași problemă: trebuie să creați un personalizat singur [cpt_slug] .php fișier în dosarul temei, dacă nu doriți să utilizați setarea implicită single.php fișier din tema dvs..

În acest post aș dori să acopere două aspecte ale utilizării șabloanelor personalizate. Primul pas este să arătăm că putem folosi un fișier personalizat conținut direct în plugin-ul însuși, în loc să se încarce implicit single.php, iar al doilea este cum să vă creați propriul fișier personalizat în dosarul tematic.

Multe pluginuri, cum ar fi Easy Digital Downloads sau Shopp, utilizează această metodă: plugin-ul verifică dacă definiți un șablon personalizat în dosarul tematic, dacă este cazul atunci fișierul este încărcat, altfel fișierul implicit de șablon plugin este încărcat. În ambele cazuri, tema implicită single.php fișierul nu este încărcat.


Definiți pluginul și structura acestuia

Primul pas este să creați un plugin, să îl numim "Selector de șabloane". Creeaza o "template-Selectorul de"din dosar / Wp-content / plugins /, cu următoarea structură:

Structura pluginului

Apoi deschideți fișierul principal template-choose.php și plasați următorul cod de antet plugin:

/ * Nume Plugin: Șablon CPT URL-ul Chooser Plugin: http://wp.tutsplus.com/ Descriere: Încarcă un fișier de șablon personalizat în locul versiunii standard a single.php Versiune: 0.1 Autor: Remi Corson URI autor: http: // wp .tutsplus.com / * /

Definiți constantele Plugin

Mai târziu în plugin vom avea nevoie să preluăm cu ușurință adresa URL a plugin-ului și calea lui, de aceea trebuie să definim câteva constante:

 / * | ----------------------------------------------- --------------------------- CONSTANTE | ------------------------------------------------ -------------------------- * / dacă (! definit ('RC_TC_BASE_FILE')) definește ('RC_TC_BASE_FILE', __FILE__); dacă (! definit ('RC_TC_BASE_DIR')) definește ('RC_TC_BASE_DIR', dirname (RC_TC_BASE_FILE)); dacă (! definit ('RC_TC_PLUGIN_URL')) definește ('RC_TC_PLUGIN_URL', plugin_dir_url (__FILE__));

Înregistrați un tip de post particularizat

Pentru a merge mai departe, trebuie să configurați un nou post tip personalizat, să creați un "scrisoare de recomandare"CPT, cu unele suporturi și caracteristici foarte elementare.Pentru că scopul postului nu este de a învăța cum să creați un tip de post personalizat, voi folosi un cod destul de simplu împărțit în 3 părți: etichetele personalizate tip post, suporturile , și argumente personalizate tip post.Tot ce încorporează într-o singură funcție:

 / * | ----------------------------------------------- --------------------------- DEFINITI TIPUL POST VAMAL | ---------------------------------------------- ------------------------------ * / / ** ** Configurarea mărturiei personalizate Post Tip * * @ din 1.0 * / funcția rc_tc_setup_post_types ("Testimonials", "rc_tc"), "singular_name" => esc_html __ ('Testimonial', 'rc_tc'), 'add_new' = = > esc_html __ ('Add New Testimonial', 'rc_tc'), 'edit_item' => esc_html __ ('Edit Testimonial', 'rc_tc'), 'new_item' 'rc_tc', 'search_items' => esc_html __ ('Testimonial', 'rc_tc'), 'view_item' => esc_html __ (' not_found '=> esc_html __ (' Nici o mărturie nu a fost găsită ',' rc_tc '),' not_found_in_trash '=> esc_html __ (' Nici o mărturie nu a fost găsită în coșul de gunoi ',' rc_tc '),' parent_item_colon '=> = array ('title', 'editor'); // Custom Post Type Suportă $ args = array ('labels' => etichete $, 'publicly_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, 'suport' => $ supports, 'menu_icon' => RC_TC_PLUGIN_URL. '/includes/images/testimonials_icon.png', // puteți seta aici propria pictogramă); // În cele din urmă, înregistrați tipul postului personalizat "mărturie" register_post_type ('testimonial', $ args);  add_action ('init', 'rc_tc_setup_post_types');

Nu utilizați setările implicite single.php Fişier

Acum, că tipul nostru de post personalizat este înregistrat, trebuie să creați o funcție care să îi spună WordPress nu pentru a utiliza valoarea implicită single.php din temă.

Deoarece da, în mod implicit, atunci când se afișează un tip de post personalizat pe frontieră, WordPress va verifica dacă este apelat un fișier single-testimonial.php există și o va încărca. Dacă nu, va căuta single.php. Dar nu vrem să folosim niciuna dintre ele.

Vrem ca WordPress să încarce un fișier personalizat din plugin. Pentru a face acest lucru, trebuie să cuplăm o nouă funcție la "template_includeÎn această funcție se urmărește verificarea tipului de post și acționarea în consecință:

 / * | ----------------------------------------------- --------------------------- FILTRE | ------------------------------------------------ -------------------------- * / add_filter ('template_include', 'rc_tc_template_chooser'); / * | ----------------------------------------------- --------------------------- FUNCȚIILE PLUGIN | ----------------------------------------------- --------------------------- * / / ** * Returnează fișierul șablonului * * @ din 1.0 * / funcția rc_tc_template_chooser ($ template)  // Post ID $ post_id = get_the_ID (); // Pentru toate celelalte CPT dacă (get_post_type ($ post_id)! = 'Mărturie') return $ template;  // Altfel utilizați șablonul personalizat dacă (is_single ()) return rc_tc_get_template_hierarchy ('single'); 

Încărcați modelul potrivit

După cum puteți vedea, pe linia 33 sunăm o nouă funcție rc_tc_get_template_hierarchy (). Aceasta este funcția care va verifica dacă WordPress trebuie să încarce fișierul personalizat din plugin sau șablon din dosarul tematic.

Rețineți că atunci când vorbesc despre "șablonul din dosarul temei", vorbesc despre un fișier personalizat încărcat în loc de single.php.

Să presupunem că nu doriți să încărcați șablonul inclus în plugin, ci să creați propriul șablon personalizat, tot ce trebuie să faceți este să creați un nou director în dosarul tematic, denumiți-l "plugin_template"și în acest director creați un single.php fişier. Aceasta va fi noua dvs. valoare implicită single.php încărcate numai pentru mărturiile afișate pe interfață.

Ești încă cu mine? Bine, deci să creăm funcția:

 / ** * Obțineți șablonul personalizat dacă este setat * * @ din 1.0 * / funcția rc_tc_get_template_hierarchy ($ template) // Obțineți șablonul slug $ template_slug = rtrim ($ template, '.php'); $ template = $ template_slug. '.Php'; // Verificați dacă există un șablon personalizat în dosarul tematic, dacă nu, încărcați fișierul șablonului pluginului dacă ($ theme_file = locate_template (array ('plugin_template /'. $ Template))) $ $ file = $ theme_file;  altceva $ file = RC_TC_BASE_DIR. '/ include / templates /'. șablon $;  return apply_filters ('rc_repl_template_'. $ template, $ file);  / * | ---------------------------------------------- ---------------------------- | FILTRE | ------------------------------------------------ -------------------------- * / add_filter ('template_include', 'rc_tc_template_chooser');

Șablonul implicit pentru plugin

Acum creați o nouă mărturie în administrație. Atunci deschide-te include / template-uri / single.php și apoi copiați și lipiți acest cod simplu:

  suntem în fișierul personalizat pentru plugin-uri 

Dacă vizualizați mărturia pe frontend, ar trebui să vedeți "suntem în fișierul personalizat pentru plugin". Asta am vrut. Dar dacă fișierul de șablon de plugin nu se potrivește cu nevoile dvs. sau dacă doriți să creați un design mai personal, puteți să creați un fișier în dosarul tematic.


Tema Template-ului standard

Pentru a crea un șablon personalizat, care nu utilizează cel implicit din plugin, puteți crea un nou director numit "plugin_templates"în dosarul tematic. Creați un fișier nou numit single.php și plasați acest cod:

  suntem în fișier personalizat temă 

Concluzie

Deci, ce am făcut exact? Am creat un plugin care înregistrează un tip de post personalizat "scrisoare de recomandare"Am obținut funcționalitatea pentru a încărca un fișier personalizat stocat în dosarul plugin-ului în loc de implicit single.php sau single-testimonial.php fișiere din dosarul tematic. De asemenea, am reușit să încărcăm un fișier personalizat în loc de dosarul tematic din secțiunea "plugin_templates".

De ce este frumos acest lucru? Deoarece când creați propriul plugin, puteți furniza un șablon implicit pentru a afișa tipul de post personalizat, astfel încât să alegeți utilizatorul final dacă să utilizeze propriul șablon sau nu.

Cod