Ei ole tarpeen kysyä miksi kukaan haluaisi kirjoittaa plugin WordPressille. Se on yksi ensisijaisista ominaisuuksista, jotka tekevät WordPressista joustavan ja sopivan hyvin moniin erilaisiin projekteihin. Sisään sarjan ensimmäinen osa luomme pohjan WordPress-laajennukselle, jonka ydin tunnistaa. Sitten, vuonna toinen osa opimme muuttamaan ytimen oletustoimintoja. Tänään tarkastelemme lisäominaisuuksia. Tämä on yksi tavallisimmista tehtävistä, joita laajennukset tarvitsevat.

Yleensä sinun on luotava joukko parametreja (lisävarusteita) ja annettava käyttäjälle mahdollisuus antaa heille sopivia arvoja. Arvot tallennetaan tietokantaan ja ne voidaan hakea pyynnöstä. Plugin suorittaa normaalisti erilaisia ​​toimintoja näiden arvojen perusteella ja tuottaa erilaisia ​​tulosteita.

Mitä työkaluja WordPress antaa meille mahdollisuuden tehdä tämä skenaario mahdolliseksi? Sen avulla voimme rekisteröidä vaihtoehtoja järjestelmään ja hakea ne määritetyllä tunnuksella - Options API vastaa siitä. WordPress tarjoaa myös Asetukset-sovellusliittymän, joka luo järjestelmänvalvojan käyttöliittymän lisäasetusten dialogeihin. Lisäksi se mahdollistaa mukautettujen kohteiden lisäämisen admin-valikkoon niin, että pluginilla voi olla omat asetussivunsa. Lopuksi, WordPress huolehtii plugin turvallisuudesta ja tarjoaa joukon ominaisuuksia ja puhdistusmenetelmiä käsittelemään käyttäjän tuloja turvallisesti.

Tarkastellaan yksityiskohtaisesti jokaista osaa.

Options API

Options API Options API on standardoitu tapa tallentaa mukautetut tiedot tietokantaan. Kaikki tiedot tallennetaan wp_options-taulukkoon tietyn muokatun nimen kohdalla ja niitä voi käyttää jonnekin koodissa. API: n tärkeimmät toiminnot ovat:

Get_option-funktio yksinkertaisesti poistaa tietokannasta kaikki tietyn nimen alle tallennetut tiedot ja palauttaa sen. Funktio update_option ottaa vaihtoehto -nimen ja sen arvon sekä päivittää vastaavan merkinnän tietokantaan. Jos tällaista merkintää ei ole, se luodaan automaattisesti. Molemmat toiminnot voivat toimia ryhmien ja yksittäisten arvojen kanssa. Tämä tarkoittaa, että voit tallentaa taulukkotiedoston tietokannassa yhden nimen alle ja API käsittelee sarjoituksen ja mineraalisuunnittelutoimet sinulle. Tämä on suositeltava käytäntö plugins: tallentaa kaikki plugin vaihtoehtoja array alle yhden nimen.

Plugin options '-sivu

Voit luoda asetussivun tai sivuryhmän laajennukselle admin-valikossa. Jos luot sivuryhmää, sinun on ensin lisättävä ylätason sivu:

Parametriarvot ovat itsestään selvät, mutta voit viitata lähde yksityiskohtia varten. Nyt sinun on lisättävä sisäisiä sivuja yksi kerrallaan seuraavasti:

Kuten $ parent_slug -parametri, sinun on käytettävä ylätason sivun tunnusta - jos kyseessä on mukautettu ylätaso, se on arvo, jonka annat $ menu_slug rekisteröinnin yhteydessä. Jos et tarvitse useita sivuja, voit luoda yhden asetussivun jonkin olemassa olevan ylätason osion alla - tavallisesti kohdassa "Asetukset" (vaihtoehtona-general.php tulisi käyttää $ parent_slugina). Vaihtoehtoisesti on myös pikavalintoja alaotsikoiden lisäämiseen tietyissä hallintavalikkokohteissa, "Asetukset" tapauksessa add_options_page () .

Asetukset API

Settings API Asetukset API voit luoda käyttöliittymän pluginin asetusten hallitsemiseksi; merkitse sivun asetussivuksi (prosessointi automaattisesti) ja tuota sivun ja kenttien sivuja ja kenttiä jokaisen osion sisällä käyttäjien syöttämisen hyväksymiseksi. Tämän saavuttamiseksi ensimmäinen tavoite on rekisteröidä asetukset järjestelmään ja luoda osion kenttien rakenne niille:

Viittaavat Codex parametrien yksityiskohtainen kuvaus, mutta logiikka on melko yksinkertainen: ensinnäkin rekisteröimme vaihtoehtomme nimen (jos on paljon vaihtoehtoja, ne voidaan järjestää ryhmiin); rekisteröimme osan (t) sisäisellä tunnuksella ja kenttien saralla jokaiselle osalle; API antaa meille mahdollisuuden määrittää mukautetut soittopyynnöt panoksen validointiin ja kunkin kentän ja osion näyttämiseen.

Kun rekisteröimme vaihtoehtomme ja vastaavat kentät, meidän on näytettävä ne asetussivulta - seuraavissa toiminnoissa on oltava nimeltään

tag:

Asetukset_kentät-toiminto hoitaa pakolliset piilotetut kentät, jotta natiivi WordPress -valintamekanismi toimisi. Do_settings_sections tosiasiallisesti tuottaa aiemmin rekisteröidyt osat ja kentät.

Turvallisuusnäkökohdat

Perustavanlaatuinen turvallisuussääntö, kun käsitellään vaihtoehtoja, on hyvin yksinkertainen: puhdista panos, poistetaan tulostus ja huolehditaan ominaisuuksista. Toisin sanoen, jos hyväksyt käyttäjän syötteen, sinun on tarkistettava, että sen muoto on oikea eikä sisällä haitallista sisältöä (eli validointi), jonka jälkeen voit siirtää tietoja jatkokäsittelyyn. Kun näytetään tietokannasta uutettuja tietoja, se tulisi välttää erityisten merkkien (erityisesti HTML: n) tuottamiseksi oikein. Molemmissa tehtävissä WordPress tarjoaa natiivitoimintoja, joita voidaan käyttää eri konteksteissa (lue lisää aiheesta tässä ).

Toinen huolenaihe on käyttäjien käyttöoikeudet. WordPressillä on sisäänrakennettu mekanismi, jolla hallitaan käyttäjien rooleja ja ominaisuuksia, jotka estävät pääsyn tiettyihin hallinta-alueisiin käyttäjille, joilla ei ole riittäviä käyttöoikeuksia. Vain ylläpitäjät ovat sallittuja kaikkialla. Luodessasi vaihtoehtoisia sivuja sinun on annettava heille oikeat ominaisuudet (yleensä se on "manage_options") eikä heitä salli käyttää pieniä käyttöoikeuksia käyttäviä käyttäjiä (lisätietoja WordPress-roolista ja ominaisuuksista on osoitteessa Codex ).

Laita se kaikki työhön

Katsotaanpa koko skenaario toiminnassa.

Jatkamme kehittämässä "Hello World" -esimerkkiä (joka aloitettiin sarjojen aiemmissa osissa), jossa vieraiden tekijän tiedot näkyvät postissa omalla taksonomistiikalla.

Kirjoittajan lohkon merkintä on jo aiemmin koodattu pluginiksi. Nyt aiomme antaa käyttäjälle mahdollisuuden määrittää mallipohja kyseiselle merkinnälle käyttämällä paikkamerkkejä omistajatietoihin (nimi, url ja kuvaus). Meillä on jo kaksi mukana olevaa PHP-tiedostoa: core.php (sisältäen pääkoodin) ja admin.php (sisältää admin-liittyvän koodin).

Mitä muutoksia meidän on tehtävä?

1. Luo lisäosasivun sivu (admin.php)

/* register menu item */function msp_helloworld_admin_menu_setup(){add_submenu_page('options-general.php','Helloworld Settings','Helloworld','manage_options','msp_helloworld','msp_helloworld_admin_page_screen');}add_action('admin_menu', 'msp_helloworld_admin_menu_setup'); //menu setup/* display page content */function msp_helloworld_admin_page_screen() {global $submenu;// access page settings$page_data = array();foreach($submenu['options-general.php'] as $i => $menu_item) {if($submenu['options-general.php'][$i][2] == 'msp_helloworld')$page_data = $submenu['options-general.php'][$i];}// output?>

'; palaa $ actions;} add_filter (' plugin_action_links ',' msp_helloworld_settings_link ', 2, 2);

Tässä pudotuksessa msp_helloworld_admin_menu_setup luo alasivun Asetukset-valikosta (se on suoritettava "admin_menu" -toimikossa, jotta se toimisi oikein). Sitten lähetämme asetukset lomakkeeseen msp_helloworld_admin_page_screen. Se käyttää kenttien ja valmiiden WordPress-toimintojen Asetusliittymän toimintoja muiden rajapinnan elementtien (kuten lähetyspainikkeen) kanssa. Huomaa toiminnon attribuutti

tag: sen pitäisi osoittaa "options.php" käsittelemään oikein vaihtoehtoja. Lopuksi, msp_helloworld_settings_link -suodatin luo pikakuvakkeen lisäosion sivulle plugin-hallintaikkunassa.

2. Rekisteröi laajennukset järjestelmän kanssa ja luo kentät ja säännöt niille

/* register settings */function msp_helloworld_settings_init(){register_setting('msp_helloworld_options','msp_helloworld_options','msp_helloworld_options_validate');add_settings_section('msp_helloworld_authorbox','Author's box','msp_helloworld_authorbox_desc','msp_helloworld');add_settings_field('msp_helloworld_authorbox_template','Template','msp_helloworld_authorbox_field','msp_helloworld','msp_helloworld_authorbox');}add_action('admin_init', 'msp_helloworld_settings_init');/* validate input */function msp_helloworld_options_validate($input){global $allowedposttags, $allowedrichhtml;if(isset($input['authorbox_template']))$input['authorbox_template'] = wp_kses_post($input['authorbox_template']);return $input;}/* description text */function msp_helloworld_authorbox_desc(){echo "

Enter the template markup for author box using placeholders: [gauthor_name], [gauthor_url], [gauthor_desc] for name, URL and description of author correspondingly.

";}/* filed output */function msp_helloworld_authorbox_field() {$options = get_option('msp_helloworld_options');$authorbox = (isset($options['authorbox_template'])) ? $options['authorbox_template'] : '';$authorbox = esc_textarea($authorbox); //sanitise output?>

Minun on huomautettava, että kaikki lisäosat on tallennettava ryhmänä. Huolimatta siitä, että meillä on vain yksi vaihtoehto (authorbox_template), sisällytämme se ryhmään ja vastaava kenttä osaan demonstraatiotarkoituksiin. Rekisteritoiminto msp_helloworld_settings_init olisi suoritettava 'admin_init' -koukussa. Toiminto msp_helloworld_options_validate huolehtii käyttäjän syötteistä puhdistamalla sen natiivilla wp_kses_post suodatin, joka perustuu KSES-kirjastoon. Toiminto msp_helloworld_authorbox_desc luo kuvauksen lomakkeen osalle ja msp_helloworld_authorbox_field tuottaa tekstikentän käsittelemään syötettyä merkintää. Huomaa, että osoitamme CSS-luokkien "suurikokoisen koodin" niin, että sisäänrakennettu admin-muotoilu on käytössä.

Kaikki tämä tuo seuraavaa näyttöä WordPressin hallintapaneeliin.

3. Muokkaa tekijän laatikkoa (core.php)

Teemme tämän niin, että se saa mallin tietokannasta ja korvaa paikkamerkkitiedot ([gauthor_name], [gauthor_url], [gauthor_desc]) vastaavilla arvoilla.

/* Create author's box markup */function msp_helloworld_author_block(){global $post;$author_terms = wp_get_object_terms($post->ID, 'gauthor');if(empty($author_terms))return;$name = stripslashes($author_terms[0]->name);$url = esc_url(get_term_link($author_terms[0]));$desc = wp_filter_post_kses($author_terms[0]->description);//get template from option$options = get_option('msp_helloworld_options');$out = (isset($options['authorbox_template'])) ? $options['authorbox_template'] : '';$out = str_replace(array('[gauthor_url]', '[gauthor_name]', '[gauthor_desc]'),array($url, $name, $desc),$out);return $out;}

Lopuksi meidän plugin (joidenkin tyylien soveltamisen jälkeen) tuottaa mukavan vieraskirjan laatikon postisisältöön.

johtopäätös

Lisätietojen tallentaminen ja käyttäminen on hyvin yleinen tehtävä, jota useat laajennukset tarvitsevat. Vaihtoehtomekanismin avulla voit tarjota käyttäjille mahdollisuuden virittää plugin heidän tarpeisiinsa (jotka he varmasti arvostavat). Jopa kehittämällä itse tarvitset tapa tallentaa tietyn asennuksen yksityiskohdat. Tukeutuen natiiviin WordPress-sovellusliittymiin ja toimintoihin tällaisten tehtävien ratkaisemisessa on hyvä tapa luoda ylläpidettävä, turvallinen ja tulevaisuuden kestävä koodi.

Millaisia ​​laajennuksia haluat nähdä käytettävissä WordPressissä? Oletko rakentanut omasi käyttämällä tätä sarjaa? Kerro meille alla olevissa huomautuksissa.

Esitetty kuva käyttää moduulikuva kautta Shutterstock