Egyedi WordPress Üzenetküldési Rendszer készítése, Negyedik rész
() translation by (you can also view the original English article)
Ebben a sorozatban vettünk egy pillantást, hogyan tudunk elkészíteni egy rendszert amely lehetővé teszi számunkra, hogy programozott módon határozzunk meg egyedi üzeneteket amelyek egy megadott WordPress adminisztrációs oldalon jelennek meg.
Ha végigkövetted a sorozatot, akkor tudod:
- Mi már lefektettük az alapjait egy pluginnak, amit használtunk a sorozat alatt, és még egy kicsit tovább is fejlesztettük.
- Mi már definiáltunk és használtunk egyéni horog, hogy fel tudjuk használni a beállítások üzenetek megjelenítéséhez.
- Adtunk hozzá támogatást sikeres, figyelmeztető és hibaüzenetekhez ami megjelenhet egy adott oldal tetején.
Mint említettük az előző útmutatóban:
De ha olvastad minden előző útmutatóm, tudod, hogy én nem vagyok egy rajongója a duplikált kódoknak. Annak sem vagyok a híve, hogy egy osztály több dolgot csináljon. És sajnos itt pontosan ezt csináljuk.
Ezt a problémát fogjuk megoldani ebben az utolsó útmutatóban. A végén mi lesz egy komplett megoldásunk ami olyan objektumorientált elveket használ, mint az öröklődés. Lesz néhány módszerünk, amiket tudunk használni a programozáshoz, vagy lehet regisztrálni a WordPress rendszerrel.
Kezdjük a végével
Ezen a ponton kell tudni, pontosan mire van szükséged a helyi fejlesztési környezetben. Pontosabban a következőkre lesz szükséged:
- PHP 5.6.25 and MySQL 5.6.28
- Apache or Nginx
- WordPress 4.6.1
- Az általad preferált IDE vagy szerkesztő
Javaslom továbbá a forráskód legfrissebb változatát, hiszen ez lehetővé teszi számodra az összes eddigi változás áttekintését. Akkor sincs gond ha ez nincs meg, de javaslom hogy mielőtt továbblépne olvassa el a korábbi útmutatókat.
Az előző útmutatóban
Akár emlékezhetsz is arra, hogy az előző útmutatóban egy osztály végzett túl sok munkát.
Így hát nem tudtál volna egyszerű választ adni arra, hogy egy adott osztály mit csinál. Ehelyett azt kellett volna mondanod, hogy az adott osztály volt a felelős a különféle üzenetek egymástól független kezeléséért.
És bár lehet, hogy a helyzet, hogy ez volt "egyéni üzenetek kezelése", nem, akkor feltétlenül kell leírja, mennyire részletes a osztály volt. Ez az a probléma amire jelen útmutató megoldást nyújt.
Az utolsó útmutatóban
Legfőképp a következőkre fogunk összpontosítani:
- a régi beállítások osztály eltörlése
- egy új, általánosabb osztály hozzáadása
- egy új beállítások osztály hozzáadása, amely a kommunikációt szolgálja
- új módszerek bemutatása melyeket a WordPress-től függetlenül tudunk használni
- a WordPress üzenetkezelésének egyszerűsítése
Most hogy megvan mit kell csinálnunk, vágjunk bele a fent leírtakba.
A munkánk átalakítása
Amikor átalakítjuk a korábbi munkánkat, segít ha tudjuk pontosan mit is akarunk csinálni. A mi esetünkben elismerjük, hogy van egy csomó duplikált kód amit lehetne tömöríteni.
Ráadásul van három különböző típusú üzenetünk, amelyek pontosan ugyanazon a módon vannak kezelve. És ebben az esetben, ez a HTML osztály tulajdonságaival van összefüggésben.
Így mi általánosíthatjuk ezt a kódot, hogy összpontosítson egy adott típusra, és megerősíthetünk eljárást ami hiba-, és sikerüzenetek hozzáadására szolgál, azáltal hogy létrehozunk egy eljárást ami felismeri az említett típust.
Végül mi ezt fogjuk tenni. De először is, egy kis karbantartás.
1. A régi beállítások eltávolítása
A korábbiakban egy Settings_Messenger
nevű osztállyal dolgoztunk. Eddig a pontig megfelelően szolgálta a célját, de az útmutató hátralévő részében újraírjuk az osztályt.
Mikor egy ilyen típusú újraírásba kezdenénk, egyszerűbbnek tűnhet törölni az osztályt és újrakezdeni. Vannak alkalmak amikor ez megfelelő, azonban ez nem az a helyzet. Ehelyett mi vesszük az adott osztályt és átírjuk ami már benne van.
Szóval a lényeg, hogy nem szabad törölni a fájlt és újat kezdeni. Ehelyett nyomon követheted a lépéseket ebben az útmutatóban.
2. egy új üzenet beállító osztály
Először is nézzük meg a Settings_Message
osztályt. Ez képvisel bármilyen típusú üzenetet amit beírunk. Tehát ez fogja kezelni a sikeres, hibás és figyelmeztető üzeneteket.
Ehhez az szükséges, hogy meghatározzuk az osztályt, bevezetünk egy egységes értéket és kivitelezzük. Nézd meg ezt a kódot, melyet később elmagyarázok:
1 |
<?php
|
2 |
|
3 |
class Settings_Message { |
4 |
|
5 |
private $messages; |
6 |
|
7 |
public function __construct() { |
8 |
|
9 |
$this->messages = array( |
10 |
'success' => array(), |
11 |
'error' => array(), |
12 |
'warning' => array(), |
13 |
);
|
14 |
}
|
15 |
}
|
Ahogy az látható, létrehoztunk egy privát attribútumot $messages
néven. Amikor az osztály értéket kap, készítünk egy többdimenziós tömböt. Minden index (success
, error
vagy warning
) a saját tömbjére hivatkozik, amelyikbe a hozzá tartozó üzeneteket tároljuk.
Következőnek tudnunk kell hozzáadni, lekérni egy illetve az összes üzenetet. Pillanatokon belül kitérek egyesével ezekre is részletesebben.
Üzenetek hozzáadása
Először is nézzük meg hogyan adunk hozzá üzeneteket:
1 |
<?php
|
2 |
public function add_message( $type, $message ) { |
3 |
|
4 |
$message = sanitize_text_field( $message ); |
5 |
|
6 |
if ( in_array( $message, $this->messages[ $type ] ) ) { |
7 |
return; |
8 |
}
|
9 |
|
10 |
array_push( $this->messages[ $type ], $message ); |
11 |
}
|
Ez az üzenet először veszi a bejövő stringet és feldarabolja az adatokat. Ezután ellenőrzi, hogy létezik-e már a sikeres üzenetek között. Ha igen, szimplán visszatér. Mivel ugye nem akarunk üzeneteket duplikálni.
Ellenkező esetben hozzáadja az üzenetet a gyűjteményhez.
Üzenetek lekérése
A visszakapott üzeneteknek két formája van:
- üzenetek feldolgozása típus szerint
- az üzenetek feldolgozása az adminisztrációs panel képernyőjén
Emlékeztető: vannak helyzetek amikor csak a figyelmeztető üzeneteket akarjuk megjeleníteni. Más esetben minden üzenetet megjeleníthetünk. Mivel ennek két módja van, először feldolgozunk egyet teljesen majd kihasználjuk azt teljesen egy másik funkciónál.
Megtévesztően hangzik? Maradj itt és megmagyarázom az egészet. Az első rész amire fókuszálunk az az üzenetek feldolgozása típus szerint. Itt a kód ehhez (ismerősnek tűnhet):
1 |
<?php
|
2 |
|
3 |
public function get_messages( $type ) { |
4 |
|
5 |
if ( empty( $this->messages[ $type ] ) ) { |
6 |
return; |
7 |
}
|
8 |
|
9 |
$html = "<div class='notice notice-$type is-dismissible'>"; |
10 |
$html .= '<ul>'; |
11 |
foreach ( $this->messages[ $type ] as $message ) { |
12 |
$html .= "<li>$message</li>"; |
13 |
}
|
14 |
$html .= '</ul>'; |
15 |
$html .= '</div><!-- .notice-$type -->'; |
16 |
|
17 |
$allowed_html = array( |
18 |
'div' => array( |
19 |
'class' => array(), |
20 |
),
|
21 |
'ul' => array(), |
22 |
'li' => array(), |
23 |
);
|
24 |
|
25 |
echo wp_kses( $html, $allowed_html ); |
26 |
}
|
Észreveheted hogy itt sokat használunk az előző tutorial kódjából; viszont általánosítottuk .
Ez lehetővé teszi számunkra, hogy egyetlen funkciót használjunk az üzenetek feldolgozásához. De ez még nem minden. És mi történik ha az összes üzenetet le akarjuk kérni? Ez azért is lehet, hogy egy oldalon dolgozzuk fel, vagy más folyamathoz vegyük hasznát.
Ehhez bemutatok egy másik funkciót:
1 |
<?php
|
2 |
|
3 |
public function get_all_messages() { |
4 |
|
5 |
foreach ( $this->messages as $type => $message ) { |
6 |
$this->get_messages( $type ); |
7 |
}
|
8 |
}
|
Ennek az üzenetnek elég könnyűnek kéne lennie a megértéshez: Egyszerűen végigmegy az összes üzeneten ami a gyűjteményben található, és meghívja a get_messages
függvényt amiről fentebb írtam.
Ez még mindig egyszerre dolgozza fel őket. Ha más célra használnád fel őket, az eredményt string típusra alakíthatod és visszatérhetsz vele, vagy más programozói funkciót is igénybe vehetsz.
Ez csak egy implementációja.
3. az üzenetek beállítása
Ez dolgozik a Settings_Message
osztállyal. De hogyan kommunikálunk vele? Természetesen tudunk közvetlenül is hivatkozni rá, de ha van egy középhaladó osztály ami felett van irányításunk ami hozzánk tér vissza, akkor több feladatot is adhatunk a Settings_Message
osztálynak.
Lépjünk be a Settings_Messenger
-be. Ez az osztály felelős azért, hogy olvashassuk illetve írhassuk az üzeneteket. Szerintem ezt fel lehetne osztani két osztályra a feladatai szerint, mivel mindkettő egyaránt ír és olvas.
Az osztály beállítása a következőképp zajlik:
- A kivitelező létrehozza egy példányát a
Settings_Message
osztálynak, hogy fel tudjuk használni az üzenetek küldéséhez és fogadásához. - A módszer társítja az egyéni
tutsplus_settings_messages
-hez amit az előző tutorialban meghatároztunk.
Vessünk egy pillantást a következő néhány metódusra:
1 |
<?php
|
2 |
|
3 |
class Settings_Messenger { |
4 |
|
5 |
private $message; |
6 |
|
7 |
public function __construct() { |
8 |
$this->message = new Settings_Message(); |
9 |
}
|
10 |
|
11 |
public function init() { |
12 |
add_action( 'tutsplus_settings_messages', array( $this, 'get_all_messages' ) ); |
13 |
}
|
14 |
}
|
Emlékezhetünk hogy korábban már meghatároztuk a settings.php
-t. A teljesség igénye nélkül:
1 |
<div class="wrap"> |
2 |
|
3 |
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1> |
4 |
<?php do_action( 'tutsplus_settings_messages' ); ?>
|
5 |
|
6 |
<p class="description"> |
7 |
We aren't actually going to display options on this page. Instead, we're going |
8 |
to use this page to demonstration how to hook into our custom messenger. |
9 |
</p><!-- .description --> |
10 |
</div><!-- .wrap --> |
Megjegyzés: ez a különleges függvény a get_all_messages függvényt használja, amit áttekintünk egy pillanaton belül Nem muszáj ezt a módszert alkalmazni. Ehelyett ezt a siker vagy bármilyen más üzenetek feldolgozásához is használhatjuk.
Üzenetek hozzáadása
Az üzenetek hozzáadásához szükséges föggvények létrehozása egyszerű, hiszen csak a típust és magát az üzenetet kell megadni hozzá. Emlékezzünk, hogy a Settings_Message
az információt darabolja fel, szóval ezt használhatjuk a bejövő üzenetekre.
Alább hozzáadunk siker, figyelmeztető illetve hibaüzeneteket:
1 |
<?php
|
2 |
|
3 |
public function add_success_message( $message ) { |
4 |
$this->add_message( 'success', $message ); |
5 |
}
|
6 |
|
7 |
public function add_warning_message( $message ) { |
8 |
$this->add_message( 'warning', $message ); |
9 |
}
|
10 |
|
11 |
public function add_error_message( $message ) { |
12 |
$this->add_message( 'error', $message ); |
13 |
}
|
Egész egyszerű, nem?
Üzenetek lekérése
Az üzenetek lekérése nem sokban különbözik kivéve hogy meg kell adni a visszatérési érték típusát.
1 |
<?php
|
2 |
|
3 |
public function get_success_messages() { |
4 |
echo $this->get_messages( 'success' ); |
5 |
}
|
6 |
|
7 |
public function get_warning_messages() { |
8 |
echo $this->get_messages( 'warning' ); |
9 |
}
|
10 |
|
11 |
public function get_error_messages() { |
12 |
echo $this->get_messages( 'error' ); |
13 |
}
|
Már kész is, ugye?
De értetted is?
Észrevehetted hogy a fenti üzenetek két olyan metódusra hivatkoznak amiket még nem néztünk meg. Ezek privát üzenetek amik segítenek egyszerűsíteni a fenti függvényeket.
Nézd meg a következő módszereket amik az üzenetek hozzáadásáért és lekéréséért is felelősek:
1 |
<?php
|
2 |
|
3 |
private function add_message( $type, $message ) { |
4 |
$this->message->add_message( $type, $message ); |
5 |
}
|
6 |
|
7 |
private function get_messages( $type ) { |
8 |
return $this->message->get_messages( $type ); |
9 |
}
|
És ezzel kész is az új Settings_Messenger
osztály. Így már minden egyszerűbb, nemde?
A plugin elindítása
Felmerülhet a kérdés: most hogy minden változást eszközöltünk, hogyan indíthatjuk el a plugint?
Nézzük meg alább a teljes függvényt:
1 |
<?php
|
2 |
|
3 |
add_action( 'plugins_loaded', 'tutsplus_custom_messaging_start' ); |
4 |
/**
|
5 |
* Starts the plugin.
|
6 |
*
|
7 |
* @since 1.0.0
|
8 |
*/
|
9 |
function tutsplus_custom_messaging_start() { |
10 |
|
11 |
$plugin = new Submenu( |
12 |
new Submenu_Page() |
13 |
);
|
14 |
$plugin->init(); |
15 |
|
16 |
$messenger = new Settings_Messenger(); |
17 |
$messenger->init(); |
18 |
|
19 |
$messenger->add_success_message( 'Nice shot kid, that was one in a million!' ); |
20 |
$messenger->add_warning_message( 'Do not go gently into that good night.' ); |
21 |
$messenger->add_error_message( 'Danger Will Robinson.' ); |
22 |
}
|
És ez az.
Néhány említésre méltó dolog:
- Ha nem hívod meg a
Settings_Messenger
osztályt, nem kell az üzenetek beállítások oldalon való megjelenítésével foglalkoznod. - A kód üzeneteket ad a
Settings_Messenger
-hez, de nem tér vissza mert más módszert alkalmazok. - Ha le akarsz kérni üzeneteket használhatod a fentebb részletezett módszereket.
Ezzel kész is vagyunk az újraírással. Ez nem fog egyből működni, mivel még kell pár kód az összes szükséges PHP fájl betöltéséhez, de a fenti kód az átírással foglalkozik ami az egész útmutató lényege.
Összegzés
Egy teljes, működő verzióhoz töltsd le a teljes forráskódot ami mellékelve van ehhez a poszthoz.
Remélem hogy a kurzus során sikerült új képességeket szerezned a WordPress fejlesztéssel kapcsolatban. Az útmutatók során több dolgot is említettünk:
- egyedi menük
- adminisztrációs oldalak bemutatása
- különböző üzenettípusok
- egyedi függvények meghatározása és kezelése
- és egy objektum orientált kód átalakítása
Ahogy megszokott, mindig örömmel megválaszolom a kommentek között felmerülő kérdéseket, továbbá megnézheted a blogom valamint követhetsz Twitteren. Általában WordPress szoftverfejlesztésről és hasonló témákról írok. Ha érdekel a WordPress fejlesztés, ne felejtsd el megnézni a korábbi útmutató sorozataimat, és egyéb WordPress anyagokat amit itt az Envato Tuts+-on találsz.