Der er ingen grund til at spørge, hvorfor nogen vil gerne skrive et plugin til WordPress. Det er en af ​​de primære funktioner, der gør WordPress så fleksibel og god tilpasning til en bred vifte af projekter. I den første del af vores serie Vi har skabt basen til et WordPress-plugin, der kan genkendes af kernen. Derefter, i den anden del vi lærte at ændre standard funktionalitet i kernen. I dag skal vi se på plugin muligheder. Dette er en af ​​de mest almindelige opgaver, som plugins skal udføre.

Normalt skal du oprette et sæt parametre (muligheder) og give brugeren mulighed for at tildele passende værdier til dem. Værdierne gemmes i databasen og kan hentes på forespørgsel. Plugin'et udfører normalt forskellige handlinger baseret på disse værdier, producerer f.eks. Forskellige output.

Hvilke værktøjer giver WordPress os til at gøre dette scenario muligt? Det giver os mulighed for at registrere muligheder med systemet og hente dem ved tildelt ID - Options API er ansvarlig for det. WordPress giver også en indstillings API til at oprette en admin GUI til indstillingsdialoger. Bortset fra det tillader det os at tilføje brugerdefinerede emner til adminmenuen, så plugin kan have sin egen indstillingsside. Endelig tager WordPress sig af pluginsikkerhed og giver et sæt funktioner og rengøringsmetoder til at håndtere brugerindgang på en sikker måde.

Lad os se nærmere på hver enkelt del.

Indstillinger API

Det Indstillinger API er en standardiseret måde at lagre brugerdefinerede data i databasen. Alle data gemmes i wp_options-tabellen under et givet brugernavn og kan fås af det fra et sted i koden. API's vigtigste funktioner er:

Get_option-funktionen udtrækker blot fra databasen enhver information, der er gemt under et givet navn, og returnerer det. Funktionen update_option tager et valgnavn og dets værdi og opdaterer den tilsvarende post i databasen. Hvis der ikke er en sådan post, oprettes den automatisk. Begge funktioner kan fungere med arrays såvel som enkeltværdier. Det betyder at du kan gemme array data under et enkelt navn i databasen, og API'et vil håndtere serialisering og mineralisering handlinger for dig. Det er en anbefalet praksis for plugins: gem alle plugin muligheder som et array under et enkelt navn.

Plugin Options 'side

Du kan oprette en indstillingsside eller en gruppe af sider til dit plugin i admin-menuen. Hvis du opretter en gruppe sider, skal du først tilføje en øverste side først:

Parameterværdierne er selvforklarende, men du kan henvise til kilde for detaljer. Nu skal du tilføje interne sider en efter én på følgende måde:

Som parameter parent_slug skal du bruge ID på øverste niveau side - i tilfælde af en brugerdefineret topniveau side er det værdien du gav som $ menu_slug ved registrering. Hvis du ikke har brug for flere sider, kan du oprette en enkelt indstillingsside under en af ​​eksisterende sektioner på øverste niveau - normalt under "Indstillinger" (options-general.php skal bruges som $ parent_slug). Alternativt findes der genvejsfunktioner til at tilføje undersider under visse admin menupunkter, i tilfælde af "Indstillinger" er det add_options_page () .

Indstillinger API

Det Indstillinger API giver dig mulighed for at oprette en grænseflade til at administrere pluginets indstillinger; Marker en side som en indstillingsside (for automatisk at behandle input) og output sektioner på den side og felter inden for hver sektion for at acceptere brugerindgang. For at opnå det er dit første mål at registrere indstillinger med systemet og oprette sektionsfeltstruktur for dem:

Se i Codex for en detaljeret beskrivelse af parametrene, men logikken er ganske simpel. Først og fremmest registrerer vi vores valgnavn (hvis der er mange muligheder, kan de organiseres i grupper); så registrerer vi sektion (er) med et internt id og et sæt felter for hver sektion; API'en giver os mulighed for at angive brugerdefinerede tilbagekaldelser til input validering og for visning af hvert felt og sektion.

Efter at have registreret vores muligheder og tilhørende felter skal vi vise dem på indstillingssiden - følgende funktioner skal kaldes inde i

tag:

Funktionen settings_fields tager sig af obligatoriske skjulte felter for den indbyggede WordPress-indstillingsmekanisme til at fungere. Do_settings_sections output faktisk tidligere registrerede sektioner og felter.

Sikkerhedshensyn

Den grundlæggende sikkerhedsregel når man beskæftiger sig med indstillinger er meget enkel: Rens input, undgå output og passe på evner. Med andre ord, hvis du accepterer input fra en bruger, skal du kontrollere, at formatet er korrekt og ikke indeholder skadeligt indhold (det er validering), hvorefter du kan videregive dataene til videre behandling. Når data udvindes fra databasen, skal det undslippes for at udstille specialtegn (især HTML) korrekt. For begge opgaver giver WordPress native funktioner, som kan bruges i forskellige sammenhænge (læs mere om emnet her ).

Et andet problem er brugerens tilladelser. WordPress har indbygget mekanisme der styrer brugernes roller og funktioner, der blokerer adgang til bestemte adminområder for brugere med utilstrækkelige tilladelser. Kun admins er tilladt overalt. Når du opretter valgsider, skal du tildele rigtige funktioner til dem (normalt er det 'manage_options') og tillader ikke brugere med lave privilegier at få adgang til siden (for mere information om WordPress-roller og -funktioner henvises til Codex ).

Sæt det hele på arbejde

Lad os se hele scenariet i aktion.

Vi fortsætter med at udvikle vores 'Hello World' eksempel (startet i de tidligere dele af serien), der viser gæstforfatterens information under et indlæg ved hjælp af brugerdefineret taksonomi.

Forfatterens blokmarkering blev tidligere kodet hardt i plugin'et. Nu skal vi give brugeren mulighed for at angive en skabelon til den markering ved hjælp af pladsholdere til forfatterspecifikke data (navn, url og beskrivelse). Vores plugin har allerede to inkluderende PHP-filer: core.php (indeholdende hovedkoden) og admin.php (indeholdende admin-relateret kode).

Hvilke ændringer skal vi lave?

1. Opret en plugin options side (i 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?>

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

I dette uddrag opretter msp_helloworld_admin_menu_setup en underside under menuen 'Indstillinger' (den skal udføres på handlingsskroen 'admin_menu' for at fungere korrekt). Så udsender vi indstillingsformularen med msp_helloworld_admin_page_screen. Den bruger indstillinger API-funktioner til felter og præ-bygget WordPress-funktioner til andre elementer i grænsefladen (som send-knappen). Bemærk aktionsattributten for

tag: det skal pege på 'options.php' for at behandle valgmuligheder korrekt. Endelig skaber msp_helloworld_settings_link filter et genvejslinks til indstillingssiden på plugin management screen.

2. Registrer plugin muligheder med systemet og oprette felter og regler for dem

/* 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?>

Jeg skal påpege, at alle plugin muligheder skal gemmes som en matrix. På trods af at vi kun har en mulighed (authorbox_template), inkludere vi det i en matrix og det tilsvarende felt i sektionen til demonstrationsformål. Registreringsfunktionen msp_helloworld_settings_init skal udføres på 'admin_init'-krogen. Funktionen msp_helloworld_options_validate tager sig af brugerindgangen ved at rense den med den indfødte wp_kses_post filter, der er afhængig af KSES-biblioteket. Funktionen msp_helloworld_authorbox_desc opretter en beskrivelse af formularens sektion, og msp_helloworld_authorbox_field udsender et tekstområde til at håndtere indlæst markup. Bemærk, at vi tildeler CSS klasserne "big-text kode" til den, så den indbyggede admin styling anvendes.

Alt dette producerer følgende skærm i WordPress admin panel.

3. Rediger den funktion, der udsender forfatterens boks (i core.php)

Vi gør dette, så det får skabelonen fra databasen og erstatter placeholder data ([gauthor_name], [gauthor_url], [gauthor_desc]) med de tilsvarende værdier.

/* 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;}

Endelig producerer vores plugin (efter anvendelse af nogle stilarter) en dejlig gæstforfatters boks under postindhold.

Konklusion

Lagring og adgang til valgdata er en meget almindelig opgave, at mange plugins skal udføres. Via valgmekanismen kan du give dine brugere mulighed for at tune plugin'et til deres behov (hvilket de helt sikkert vil sætte pris på). Selv udvikle sig selv, kan du have brug for en måde at gemme detaljer på en bestemt installation. At stole på native WordPress API'er og funktioner, når du løser sådanne opgaver, er en god måde at oprette vedligeholdelig, sikker og fremtidssikker kode.

Hvilke slags plugins kan du se tilgængelig for WordPress? Har du bygget din egen ved hjælp af denne serie? Lad os vide i kommentarerne nedenfor.

Udvalgte billedbrug modul billede via Shutterstock