Object-georiënteerde code, onder andere, kan helpen bij het organiseren en hergebruik van uw code. In deze zelfstudie leer ik je de basisprincipes van het schrijven van een WordPress-plug-in met behulp van objectgerichte technieken. We gebruiken Dribbble's API als een voorbeeld voor deze tutorial. Klaar?
Voordat je verdergaat met deze tutorial, moet je op zijn minst een elementair begrip hebben van het schrijven van een WordPress-plug-in. Jonathan heeft een geweldige tutorial geschreven over "Hoe een WordPress plug-in schrijven". Geef het een read.
Het maken van WordPress-plug-ins met objectgeoriënteerde code is behoorlijk efficiënt en opgeruimd in vergelijking met het gebruik van procedurele code. Het is eenvoudiger om de codebasis te beheren en uit te breiden met behulp van overervingstechnieken, wat met name handig kan zijn bij het schrijven van een grote plug-in.
Om een WordPress plug-in te schrijven, hebben we eerst een gevoel van richting nodig. We gaan een plug-in schrijven die de nieuwste shots van Dribbble zal weergeven, met behulp van hun REST API. We voegen vervolgens ondersteuning voor shortcodes toe voor berichten en widgets en sjabloonlabels voor thema's.
Object georiënteerde code is gebaseerd op klassen en methoden (functies). Laten we onze kernklasse maken, die interactie heeft met de haken en filters van WordPress.
class WPDribbble public function __construct () $ wpDribbble = new WPDribbble ();
PHP-klassen hebben een constructorfunctie, __construct
, die wordt uitgevoerd zodra een nieuw exemplaar van een klasse wordt geïnstantieerd. Alle WordPress-hooks en -filters worden geregistreerd onder de constructor van onze plugin-klasse. Laten we verder gaan en een shortcode registreren voor onze plug-in. De add_shortcode ()
functie / haak gaat onder de constructorfunctie.
De nieuwe instantie van een klasse / object wordt geregistreerd met behulp van de nieuwe
trefwoord. Raadpleeg de laatste regel in de onderstaande code.
klasse WPDribbble public function __construct () add_shortcode ('Dribbble', array ($ this, 'shortcode')); openbare functie shortcode () $ wpDribbble = new WPDribbble ();
Merk op hoe we een gebruiken
rangschikking
in de callback-functie parameter? Om callback-functies binnen een object te registreren, moeten we eenrangschikking
.
Het eerste item van de array verwijst naar het object, via $ this
. Het tweede item in de rangschikking
is de naam van de methode binnen de klasse. Alle haken en filters moeten op deze manier worden gerefereerd binnen een klas.
# 1. Standaardgebruik add_shortcode ('shortcode_name', 'shortcode_func'); function shortcode_func () // Inhoud van deze functie wordt uitgevoerd wanneer de blogger // de shortcode [shortcode_name] gebruikt. # 2. Met PHP 5.3 kunnen we een anonieme functie doorgeven. add_shortcode ('shortcode_name', function () // Inhoud van deze functie wordt uitgevoerd wanneer de blogger // de shortcode [shortcode_name] gebruikt); # 3. Binnen een klasse klasse WPDribbble public function __construct () add_shortcode ('Dribbble', array ($ this, 'shortcode')); shortcode voor openbare functie () // Inhoud van deze functie wordt uitgevoerd wanneer de blogger // de shortcode [shortcode_name] gebruikt.
Omdat we momenteel geen fancy API-functies nodig hebben, gaan we een vrij eenvoudige API-wrapper voor Dribbble maken. Er is al een bibliotheek beschikbaar voor Dribbble, maar in het belang van deze zelfstudie gaan we onze eigen schrijven. Het helpt je de concepten achter deze tutorial te begrijpen.
We gaan een DribbbleAPI schrijven voorwerp
, en registreer een methode
riep getPlayerShots ()
om te communiceren met de API van Dribbble en een te retourneren rangschikking
van de nieuwste opnamen.
Laten we een nieuw bestand voor deze klasse maken, genaamd DribbbleAPI.php
class DribbbleAPI // url to Dribbble api protected $ apiUrl = 'http://api.dribbble.com/'; // Dribbble gebruikersnaam of gebruiker-ID beveiligde $ gebruiker;
Hierboven stellen we twee klassenvariabelen in.
__construct
) methode.class DribbbleAPI // url to Dribbble api protected $ apiUrl = 'http://api.dribbble.com/'; // Dribbble gebruikersnaam of gebruiker-ID beveiligde $ gebruiker; publieke functie __construct ($ user) $ this-> user = $ user;
De constructor is geslaagd voor a $ user
variabele, die vervolgens door de constructor wordt doorgegeven aan de klasse-eigenschap, genaamd gebruiker
.
We prefixen de eigenschap, of de variabelenaam met openbaar
om op te geven dat de waarde van deze eigenschap kan worden opgehaald van buiten de klasse
. Als we in plaats daarvan de toegang tot het onroerend goed willen beperken tot alleen dit klasse
, en misschien elk klasse
es die ervan erven, zouden we de beschermde
voorvoegsel. Deze praktijk wordt inkapseling genoemd.
We hebben de basis klaar voor onze Dribbble API-wrapper. Nu gaan we een nieuw schrijven methode
, riep getPlayerShots ()
. Het doel van dit methode
zal zijn om de API te ondervragen en het resultaat om te zetten in een rangschikking
voor gebruik binnen onze plug-in.
class DribbbleAPI // url to Dribbble api protected $ apiUrl = 'http://api.dribbble.com/'; // Dribbble gebruikersnaam of gebruiker-ID beveiligde $ gebruiker; publieke functie __construct ($ user) $ this-> user = $ user; openbare functie getPlayerShots ($ perPage = 15) $ user = $ this-> user; $ json = wp_remote_get ($ this-> apiUrl. 'players /'. $ user. '/ shots? per_page ='. $ perPage); $ array = json_decode ($ json ['body']); $ shots = $ array-> shots; $ shots terugsturen;
Meer informatie over wp_remote_get.
De getPlayerShots
function haalt de gebruiker uit de klassenvariabele op. Het gebruikt WordPress ' wp_remote_get
functie om de Dribbble API te bevragen. De API reageert vervolgens op onze vraag met een JSON-reeks, die vervolgens in een wordt geparseerd rangschikking
en teruggestuurd naar de functie met behulp van de terugkeer
trefwoord.
Dit is alles wat we op dit moment van de API nodig hebben - gewoon een rangschikking
van speler shots. Als we in de toekomst meer functionaliteit nodig hebben, kunnen we meer toevoegen methode
s tot de stroom klasse
, of maak een nieuwe klasse
die breidt deze uit. Nogmaals, dit wordt erfelijkheid genoemd.
DribbbleAPI
KlasseDit is het leuke gedeelte; de vers gebakken DribbbleAPI
klasse
zal in gebruik komen. We gaan de opnames doorzoeken die zijn opgehaald uit de API en genereren een html
lijst met opnames, die worden doorgegeven aan de shortcode en de sjabloontag. Tijdens de lus worden de Dribbble-afbeeldingen op ware grootte in de cache opgeslagen en opgeslagen in de map voor invoegtoepassingen. De miniaturen worden gemaakt met TimThumb.
Om te bepalen of de volledige afbeeldingen al lokaal zijn opgeslagen, is de plugin pad
Is benodigd. Ook om miniaturen mee te genereren TimThumb
, de plugin url
Is benodigd. Voor dit doel zullen we twee klassenvariabelen maken genaamd pluginPath
en pluginURL
in onze WPDribbble
klasse en stel vervolgens hun waarden in binnen de constructor methode
.
klasse WPDribbble protected $ pluginPath; beschermde $ pluginUrl; publieke functie __construct () // Set Plugin Path $ this-> pluginPath = dirname (__ FILE__); // Stel Plugin URL $ this-> pluginUrl = WP_PLUGIN_URL in. '/ Wp-Dribbble'; add_shortcode ('Dribbble', array ($ this, 'shortcode'));
getImages ()
MethodeMaak een nieuw methode
binnen de WPDribbble
klasse
, riep getImages.
Binnen een
klasse
, u kunt generieke namen gebruiken voor functies. Ze komen niet in conflict met andere plug-ins of ingebouwde functies van WordPress, omdat ze onder deklasse
namespace.
openbare functie getImages ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true)
$ user
wordt gebruikt bij het registreren van een nieuw exemplaar van de DribbbleAPI
klasse.$ images
wordt gebruikt bij het opvragen van de API via de getPlayerShots
methode.Vervolgens gaan we de DribbbleAPI
klasse in de getImages ()
functie, en maak er een nieuw exemplaar van om de afbeeldingen te pakken.
openbare functie getImages ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true) include 'DribbbleAPI.php'; $ DribbbleAPI = nieuwe DribbbleAPI ($ user); $ shots = $ DribbbleAPI-> getPlayerShots ($ afbeeldingen); if ($ shots)
De $ shots
variabele in de code is gevuld met een rangschikking
van drie recente Dribbbles uit de $ user
.
Zoals eerder vermeld, gaan we door de $ shots
rangschikking
, en sla de afbeeldingen op volledige grootte lokaal op voor cachedoeleinden. De afbeeldingen in de cache worden gebruikt met TimThumb om de miniaturen te bedienen. Voor het opslaan van volledige afbeeldingen en miniaturen gegenereerd door TimThumb, maak twee mappen. We zullen gebruiken full-images /
voor het opslaan van afbeeldingen op volledig formaat, en cache /
voor de miniaturen, omdat dat de standaard mapnaam voor TimThumb is.
De HTML voor de lijst wordt gegenereerd binnen de $ shots
lus.
openbare functie getImages ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true) include 'DribbbleAPI.php'; $ DribbbleAPI = nieuwe DribbbleAPI ($ user); $ shots = $ DribbbleAPI-> getPlayerShots ($ afbeeldingen); if ($ shots) $ html [] = '
'. $ shot-> titel. '
'; // combineer shot-url, titel en thumbnail om toe te voegen aan de ul-lijst $ html [] = 'Het is altijd een goed idee om klassen toe te voegen aan elk element van uw plug-in. Dit biedt de geavanceerde gebruikers van uw plug-in de vrijheid om het aan te passen. Vermijd het gebruik van inline CSS voor inhoud die wordt gegenereerd via uw plug-in.
Shortcodes, zoals de naam al doet vermoeden, stelt gebruikers in staat om eenvoudig complexe inhoud toe te voegen aan blogposts.
We hebben al de add_shortcode
haak klaar in onze plugin class constructor. Nu gaan we de shortcode schrijven methode
in onze klasse
, die de shortcode-attributen zal verlengen en de Dribbble-afbeeldingen retourneren met behulp van de getImages ()
methode.
We zullen onze shortcode bellen [Dribbble]
. Zoals eerder vermeld, wordt de naam van de shortcode bepaald door de eerste parameter in de add_shortcode
functie. Het zal worden gebruikt met de attributen die vereist zijn voor de getImages ()
methode. Bijvoorbeeld: [Dribbble user = haris images = 5 width = 100 height = 100 caption = true]
.
openbare functie shortcode ($ atts) // extraheer de attributen in variabelen extract (shortcode_atts (array) ('images' => 3, 'width' => 50, 'height' => 50, 'caption' => true,) , $ atts)); // geef de attributen door aan de functie getImages en geef de afbeeldingen return $ this-> getImages ($ atts ['user'], $ images, $ width, $ height, $ caption);
Standaard ondersteunen WordPress-widgets geen shortcodes, echter met behulp van de widget_text
filter, kunnen we shortcode-ondersteuning forceren in WordPress-widgets.
We kunnen het filter toevoegen in onze WPDribbble
objectbouwer.
publieke functie __construct () // Set Plugin Path $ this-> pluginPath = dirname (__ FILE__); // Stel Plugin URL $ this-> pluginUrl = WP_PLUGIN_URL in. '/ Wp-Dribbble'; add_shortcode ('Dribbble', array ($ this, 'shortcode')); // Voeg shortcode-ondersteuning toe voor widgets add_filter ('widget_text', 'do_shortcode');
De sjabloontag kan rechtstreeks in WordPress-thema's worden gebruikt. Het basisdoel van de sjabloontag is om een nieuw exemplaar van ons te maken WPDribbble
klasse, en bel de getImages ()
methode. De sjabloontag is een eenvoudige PHP-functie en moet buiten de plug-in worden geregistreerd klasse
. Het moet een unieke naam hebben; anders zal het conflicteren met functies / plug-ins met dezelfde naam. Omdat onze plug-in is aangeroepen WP-Dribbble
, we bellen de sjabloon-tag, wp_Dribbble ()
.
functie wp_Dribbble ($ user, $ images = 3, $ width = 50, $ height = 50, $ caption = true) $ wpDribbble = new WPDribbble; echo $ wpDribbble-> getImages ($ user, $ images, $ width, $ height, $ caption);
Gefeliciteerd! U hebt met succes een WordPress-plug-in met OOP geschreven. Als u vragen heeft, laat het me weten, en ik zal mijn best doen om u te helpen?