OOP is de standaard voor geweldige code, het is flexibel, schaalbaar en uitbreidbaar. WordPress-ontwikkelaars hebben een raamwerk nodig waarop hun code kan worden gebaseerd, iets dat eenvoudig kan worden overgezet naar andere projecten om het uitvinden van het wiel twee keer per week te voorkomen. Het draait allemaal om slimmer werken, niet moeilijker!
Er is niets erger dan het activeren van een plug-in om te ontdekken dat het je website doodt, omdat twee plugin-auteurs een globale functie hebben, initialise () !
Alle code heeft een doel nodig, je moet nooit iets beginnen te schrijven (Boek, Plugin, Thema of Zelfstudie!) Zonder een duidelijk, gedefinieerd doel van waar je mee wilt gaan.
Voor deze zelfstudie gebruiken we een eenvoudige OOP-klasse om het volgende in een plug-in te doen.
Laten we beginnen met het maken van een lege klasse met niets anders dan een constructorfunctie en het in een globale variabele brengen (dit is echt gaaf, ik zal het later uitleggen!)
Vervolgens gaan we functionaliteit van de constructor delegeren, een aantal pluginpaden definiëren en afzonderlijke functies maken om acties toe te voegen om in WordPress te haken, allemaal automatisch opgeroepen door de klassenconstructor.
plugin_defines (); $ This-> setup_actions (); / ** * Definieert om overal in WordPress te worden gebruikt nadat de plug-in is geïnitieerd. * / 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__)))); / ** * Stel de acties in om de plug-in in WordPress te haken op de juiste plaatsen * / function setup_actions () // Engage. $ OOP_Class = new OOP_Class (); ?>
Dit ziet er tot nu toe goed uit, het is allemaal opgezet, maar het doet eigenlijk nog niet veel. Laten we doorgaan met de vereiste functionaliteit.
Stel de plugin-achtigen in vanuit template_redirect
// Doe iets op template_redirect, misschien wacht een aantal scripts in de wacht terwijl je niet in de admin zit? if (! is_admin ()) $ this-> plugin_enqueues ();
En de plugin_enqueues-functie:
/ ** * Gebruikt om stijlen en scripts in te stellen die nodig zijn voor de plug-in. * / function plugin_enqueues () // Voltooi jQuery wp_enqueue_script ('jQuery'); // Ons Init-script wp_enqueue_script ('plugin_init', MY_PLUGIN_URL. 'Js / init.js', array ('jQuery')); // Enkele standaardstijlen: wp_enqueue_style ('plugin_style', MY_PLUGIN_URL. 'Css / pluginstyles.css');
Stel een klassenvariabele in vóór de constructor (gewoon om alles netjes te houden).
// De links naar de onderliggende pagina's. Standaard false. var $ child_page_links = false;
Definieer de functie om de koppelingen naar onderliggende pagina's op te halen en de HTML in het object in te stellen.
/ ** * Hiermee stelt u de variabele variabelen van de onderliggende pagina van deze klasse in. * / function set_child_page_links () global $ post; // Verkrijg de onderliggende pagina's van de huidige pagina $ children = get_pages (array ('child_of' => $ post-> ID)); if (! empty ($ children)): $ out = ''; // Loop door de onderliggende pagina's en genereer wat HTML met de afbeelding, de link en de titel van de onderliggende pagina. foreach ($ children as $ child) $ img = get_the_post_thumbnail ($ child-> ID, 'thumbnail'); $ title = $ child-> post_title; $ url = get_permalink ($ child-> ID); $ uit. = ''; anders: // We hebben geen kinderen, we moeten dat aankunnen. $ out = false; stop als; $ this-> child_page_links = $ out;'; $ uit. = ''. $ img. ''. esc_html ($ titel). ''; $ uit. = ''; $ uit. = '
En voer het uit vanuit de functie template_redirect
// Alleen op een pagina. if (is_page ()) $ this-> set_child_page_links ();
Dit is waar dit begint te koelen, aangezien onze shortcode geen opties zal hebben, kunnen we een zogenaamde "getter" gebruiken, die simpelweg de klassenvariabele retourneert.
/ ** * Getter voor de onderliggende paginalinks * / function return_child_pages () return $ this-> child_page_links;
Deze functie kan als volgt in de shortcode-API worden gehangen:
add_shortcode ('Child_Pages', array ($ this, 'return_child_pages'));
Omdat we dit allemaal op template_redirect hebben geïnstantieerd, is het niet nodig om de links opnieuw te genereren, we kunnen ze gewoon overal uitspugen, zoals deze:
child_page_links) echo $ OOP_Class-> child_page_links; ?>
En het JavaScript-fragment. (Dit gebeurt in js / init.js in onze plugin-map). Dit markeert de link bij zweven en vraagt de gebruiker toestemming om door te gaan naar de onderliggende pagina.
jQuery (document) .ready (functie ($) $ ('.child_page a') .klik (functie () if (bevestigen ("Weet u zeker dat u naar de onderliggende pagina wilt gaan?")) ga terug true ; else return false;). hover (function () $ (this) .css ('background-color', '#EFEFEF');, function () $ (this) .removeAttr (' stijl' ); ); );
Last but not least, enkele standaard CSS-stijlen voor onze plug-in (/css/pluginstyles.css).
.child_page_wrapper .child_page float: left; breedte: 33% .child_page_wrapper .child_page a display: block; .child_page_wrapper .child_page span display: block; text-align: center; .child_page_wrapper .child_page img display: block; marge: 0 auto;
Deze klasse kan in bijna elke situatie worden gebruikt en is zeer geschikt (maar zeker niet beperkt tot) voor gebruik binnen het WordPress-systeem. Het kan eenmalig worden gebruikt voor een thema, en vervolgens een andere klasse-instelling voor een aantal geïntegreerde functies (wat betekent dat we de individuele functionaliteit van project tot project bijna met gemak kunnen kopiëren / plakken) en dan nog voor een snelle aangepaste plug-in voor die coole functionaliteit van uw klant behoeften die veel overdreven zijn in de beschikbare plug-ins.
Indien geschreven als onafhankelijke "secties" van de site, dan kunnen de klassen gemakkelijk worden verplaatst naar uw volgende project, waardoor geavanceerde functionaliteit snel en gemakkelijk voor u wordt!
Hoewel we het potentieel van klassen en objecten niet echt hebben aangeraakt, is dit een goed begin om inzicht te krijgen in de flexibiliteit en uitbreidbaarheid van OOP.
Pas ook op dat het opslaan van objecten in PHP, zoals dat, wel PHP-geheugen in beslag neemt, dus gebruik het wel!!