Advertisement
  1. Code
  2. WordPress Plugins

Egyedi WordPress Üzenetküldési Rendszer készítése, Negyedik rész

Scroll to top
Read Time: 9 min
This post is part of a series called Creating a Custom WordPress Messaging System.
Creating a Custom WordPress Messaging System, Part 3

() 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:

  1. üzenetek feldolgozása típus szerint
  2. 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.

Források

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.