OOP è lo standard per il grande codice, è flessibile, scalabile ed estensibile. Gli sviluppatori di WordPress hanno bisogno di un framework su cui basare il loro codice, qualcosa che può essere facilmente portato su altri progetti per risparmiare inventando la ruota due volte a settimana. Si tratta di lavorare in modo più intelligente, non più difficile!
Non c'è niente di peggio di attivare un plugin per scoprire che uccide il tuo sito web perché due autori di plugin hanno una funzione globale chiamata initialise () !
Tutto il codice ha bisogno di un obiettivo, non dovresti mai iniziare a scrivere qualcosa (Book, Plugin, Theme o Tutorial!) Senza un chiaro obiettivo definito di dove vuoi andare con esso.
Per questo tutorial, useremo una classe OOP di base per fare quanto segue in un plugin.
Iniziamo creando una classe vuota con nient'altro che una funzione di costruzione e istanzandola in una variabile globale (questo è davvero interessante, ti spiegherò più avanti!)
Quindi iniziamo a delegare funzionalità dal costruttore, definire alcuni percorsi di plugin e creare funzioni separate per aggiungere azioni da agganciare a WordPress, tutte chiamate automaticamente dal costruttore della classe.
plugin_defines (); $ This-> setup_actions (); / ** * Definisce di essere utilizzato ovunque in WordPress dopo l'avvio del plugin. * / function plugin_defines () define ('MY_PLUGIN_PATH', trailingslashit (WP_PLUGIN_DIR. '/'. str_replace (basename (__FILE__), "", plugin_basename (__FILE__)))); define ('MY_PLUGIN_URL', trailingslashit (WP_PLUGIN_URL. '/'. str_replace (basename (__FILE__), "", plugin_basename (__FILE__)))); / ** * Imposta le azioni per collegare il plugin a WordPress nei posti appropriati * / function setup_actions () // Engage. $ OOP_Class = new OOP_Class (); ?>
Questo è bello finora, è tutto configurato, ma in realtà non sta facendo molto ancora. Continuiamo ad andare avanti con la funzionalità richiesta.
Imposta il plugin accoda da template_redirect
// Fai qualcosa su template_redirect, magari accodare alcuni script mentre non sei in admin? if (! is_admin ()) $ this-> plugin_enqueues ();
E la funzione plugin_enqueues:
/ ** * Utilizzato per accodare stili e script necessari per il plug-in. * / function plugin_enqueues () // Enqueue jQuery wp_enqueue_script ('jquery'); // Our Init Script wp_enqueue_script ('plugin_init', MY_PLUGIN_URL. 'Js / init.js', array ('jquery')); // Alcuni stili di base: wp_enqueue_style ('plugin_style', MY_PLUGIN_URL. 'Css / pluginstyles.css');
Imposta una variabile di classe prima del costruttore (solo per mantenere tutto pulito).
// I collegamenti alle pagine secondarie. Falso per impostazione predefinita. var $ child_page_links = false;
Definire la funzione per recuperare i collegamenti della pagina figlio e impostare l'HTML nell'oggetto.
/ ** * Imposta la variabile dei collegamenti alle pagine figlio di questa classe. * / function set_child_page_links () global $ post; // Ottieni le pagine secondarie della pagina corrente $ children = get_pages (array ('child_of' => $ post-> ID)); if (! empty ($ children)): $ out = ''; // Passa attraverso le pagine secondarie, generando un po 'di HTML con l'immagine, il link e il titolo della pagina bambino. foreach ($ children as $ child) $ img = get_the_post_thumbnail ($ child-> ID, 'thumbnail'); $ title = $ child-> post_title; $ url = get_permalink ($ child-> ID); $ out. = ''; altro: // Non abbiamo figli, dobbiamo essere in grado di gestirlo. $ out = falso; finisci se; $ this-> child_page_links = $ out;'; $ out. = ''. $ img. ''. esc_html ($ title). ''; $ out. = ''; $ out. = '
Ed eseguilo dalla funzione template_redirect
// Solo su una pagina. if (is_page ()) $ this-> set_child_page_links ();
È qui che questo comincia a diventare interessante, dal momento che il nostro shortcode non avrà alcuna opzione, possiamo usare quello che viene chiamato "getter", che restituisce semplicemente la variabile di classe.
/ ** * Getter per i collegamenti alle pagine figlio * / function return_child_pages () return $ this-> child_page_links;
Questa funzione può essere agganciata all'API di shortcode in questo modo:
add_shortcode ('Child_Pages', array ($ this, 'return_child_pages'));
Inoltre, poiché abbiamo istanziato tutto questo su template_redirect, non c'è bisogno di rigenerare i link, possiamo semplicemente sputarli ovunque, come questo:
child_page_links) echo $ OOP_Class-> child_page_links; ?>
E lo snippet di JavaScript. (Questo va in js / init.js nella nostra cartella dei plugin). Questo evidenzia il collegamento al passaggio del mouse e chiede all'utente il permesso di continuare con la pagina figlio.
jQuery (document) .ready (function ($) $ ('.child_page a') .click (function () if (conferma ("Sei sicuro di voler andare alla pagina figlio?")) return true ; else return false;). hover (function () $ (this) .css ('background-color', '#EFEFEF');, function () $ (this) .removeAttr (' stile' ); ); );
Ultimo ma non meno importante, alcuni stili CSS di base per il nostro plugin (/css/pluginstyles.css).
.child_page_wrapper .child_page float: left; width: 33% .child_page_wrapper .child_page a display: block; .child_page_wrapper .child_page span display: block; allineamento del testo: centro; .child_page_wrapper .child_page img display: block; margine: 0 auto;
Questa classe può essere utilizzata in quasi tutte le situazioni ed è adatta (ma certamente non limitata a) per l'uso all'interno del sistema WordPress. Può essere usato una volta per un tema, e poi un'altra configurazione di classe per alcune funzionalità integrate (il che significa che possiamo quasi copiare / incollare le singole funzionalità dal progetto al progetto con facilità) e poi di nuovo per un rapido plug-in personalizzato per quella funzionalità interessante. ha bisogno di essere esagerato nei plugin disponibili.
Se scritti per essere "sezioni" indipendenti del sito, le classi potrebbero essere facilmente trasferite al tuo prossimo progetto, rendendo la funzionalità avanzata rapida e facile per te!
Anche se non abbiamo nemmeno toccato il potenziale delle classi e degli oggetti, questo è un ottimo inizio per capire la flessibilità e l'estendibilità di OOP.
State attenti anche al fatto che la memorizzazione di oggetti in PHP come questo richiede la memoria PHP, quindi usateli con attenzione!!