Il n'y a pas besoin de demander pourquoi quelqu'un voudrait écrire un plugin pour WordPress. C'est l'une des principales fonctionnalités qui rend WordPress si flexible et adapté à un large éventail de projets. Dans la première partie de notre série Nous avons créé la base d'un plugin WordPress reconnaissable par le noyau. Puis dans La seconde partie Nous avons appris à modifier la fonctionnalité par défaut du cœur. Aujourd'hui, nous allons examiner les options de plug-in. C'est l'une des tâches les plus courantes que les plugins doivent effectuer.

Généralement, vous devrez créer un ensemble de paramètres (options) et donner à l'utilisateur la possibilité d'attribuer des valeurs appropriées. Les valeurs sont stockées dans la base de données et peuvent être récupérées sur demande. Le plugin effectuera normalement différentes actions basées sur ces valeurs, produisant par exemple des sorties différentes.

Quels outils WordPress nous fournit-il pour rendre ce scénario possible? Il nous permet d'enregistrer des options avec le système et de les récupérer par identifiant attribué - L'API Options est responsable de cela. WordPress fournit également une API de paramètres pour créer une interface graphique d'administration pour les dialogues d'options. En dehors de cela, il nous permet d’ajouter des éléments personnalisés dans le menu admin afin que le plugin puisse avoir sa propre page de paramètres. Enfin, WordPress prend en charge la sécurité des plug-ins et fournit un ensemble de fonctionnalités et de méthodes de nettoyage pour gérer les entrées des utilisateurs en toute sécurité.

Regardons chaque partie en détail.

Options API

le Options API est un moyen standardisé de stocker des données personnalisées dans la base de données. Toutes les données sont enregistrées dans la table wp_options sous un nom personnalisé donné et peuvent être accessibles depuis le code. Les fonctions les plus importantes de l'API sont les suivantes:

La fonction get_option extrait simplement de la base de données toute information stockée sous un nom donné et la renvoie. La fonction update_option prend un nom d'option et sa valeur et met à jour l'entrée correspondante dans la base de données. S'il n'y en a pas, il sera créé automatiquement. Les deux fonctions peuvent fonctionner avec des tableaux ainsi que des valeurs uniques. Cela signifie que vous pouvez stocker des données de tableau sous un seul nom dans la base de données et que l'API gère les actions de sérialisation et de minéralisation pour vous. C'est une pratique recommandée pour les plugins: stockez toutes les options du plugin sous forme de tableau sous un seul nom.

Options du plugin

Vous pouvez créer une page de paramètres ou un groupe de pages pour votre plug-in dans le menu admin. Si vous créez un groupe de pages, vous devez d'abord ajouter une page de premier niveau:

Les valeurs de paramètre sont explicites mais vous pouvez vous référer à la la source pour plus de détails. Maintenant, vous devez ajouter les pages internes une par une de la manière suivante:

En tant que paramètre $ parent_slug, vous devez utiliser l'ID de la page de niveau supérieur - dans le cas d'une page de niveau supérieur personnalisée, c'est la valeur que vous avez fournie en tant que $ menu_slug lors de l'inscription. Si vous n'avez pas besoin de plusieurs pages, vous pouvez créer une page de paramètres unique sous l'une des sections de niveau supérieur existantes - généralement sous "Paramètres" (options-general.php devrait être utilisé comme $ parent_slug). Il existe également des fonctions de raccourci pour ajouter des sous-pages sous certains éléments du menu admin, dans le cas de "Paramètres" add_options_page () .

API de paramètres

le API de paramètres vous permet de créer une interface pour gérer les paramètres du plugin; marquer une page comme une page de paramètres (pour traiter automatiquement les entrées) et afficher des sections sur cette page et des champs dans chaque section pour accepter les entrées utilisateur. Pour ce faire, votre premier objectif consiste à enregistrer les paramètres dans le système et à créer une structure de champs de section pour eux:

Se référer au Manuscrit pour une description détaillée des paramètres, mais la logique est assez simple: tout d'abord, nous enregistrons le nom de nos options (s'il y a beaucoup d'options, elles peuvent être organisées en groupes); ensuite, nous enregistrons les sections avec un identifiant interne et un ensemble de champs pour chaque section; L'API nous permet de spécifier des rappels personnalisés pour la validation des entrées et l'affichage de chaque champ et section.

Après avoir enregistré nos options et les champs correspondants, nous devons les afficher sur la page des paramètres - les fonctions suivantes doivent être appelées dans le

marque:

La fonction settings_fields prend en charge les champs cachés obligatoires pour que le mécanisme d'options natif de WordPress fonctionne. Do_settings_sections génère en fait des sections et des champs précédemment enregistrés.

Considérations de sécurité

La règle de sécurité fondamentale concernant les options est très simple: nettoyer l'entrée, échapper à la sortie et gérer les capacités. En d'autres termes, si vous acceptez les entrées d'un utilisateur, vous devez vérifier que son format est correct et qu'il n'inclut pas de contenu malveillant (validation), après quoi vous pouvez transmettre les données pour un traitement ultérieur. Lorsque vous affichez des données extraites de la base de données, vous devez vous échapper pour afficher correctement les caractères spéciaux (en particulier HTML). Pour les deux tâches, WordPress fournit des fonctions natives pouvant être utilisées dans différents contextes (en savoir plus sur le sujet). ici ).

Les autorisations des utilisateurs constituent un autre point préoccupant. WordPress dispose d'un mécanisme intégré qui contrôle les rôles et les capacités des utilisateurs, ce qui bloque l'accès à certaines zones d'administration pour les utilisateurs disposant d'autorisations insuffisantes. Seuls les administrateurs sont autorisés partout. Lorsque vous créez des pages d'options, vous devez leur attribuer des fonctionnalités correctes (normalement, «manage_options») et ne permettent pas aux utilisateurs disposant de privilèges limités d'accéder à la page (pour plus d'informations sur les rôles et fonctionnalités WordPress, reportez-vous au Manuscrit ).

Mettez tout dans le travail

Voyons tout le scénario en action.

Nous continuerons à développer notre exemple «Hello World» (lancé dans les parties précédentes de la série) qui affiche les informations sur l'auteur de l'invité sous une publication à l'aide de la taxonomie personnalisée.

Le balisage du bloc de l'auteur était auparavant codé en dur dans le plug-in. Maintenant, nous allons donner à un utilisateur la possibilité de spécifier un modèle pour ce balisage en utilisant des espaces réservés pour les données spécifiques à l'auteur (nom, URL et description). Notre plugin contient déjà deux fichiers PHP pouvant être inclus: core.php (contenant le code principal) et admin.php (contenant le code associé à l’administrateur).

Quels changements devons-nous apporter?

1. Créez une page d'options de plugin (dans 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);

Dans cet extrait, msp_helloworld_admin_menu_setup crée une sous-page dans le menu 'Settings' (il doit être exécuté sur le hook d'action 'admin_menu' pour fonctionner correctement). Ensuite, nous affichons le formulaire de paramètres avec msp_helloworld_admin_page_screen. Il utilise les fonctions API de paramètres pour les champs et les fonctions WordPress prédéfinies pour les autres éléments de l'interface (comme le bouton d'envoi). Notez l'attribut d'action du

tag: pointez sur 'options.php' pour traiter les options correctement. Enfin, le filtre msp_helloworld_settings_link crée un lien de raccourci vers la page d'options de l'écran de gestion des plug-ins.

2. Enregistrez les options du plug-in avec le système et créez des champs et des règles pour eux

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

Je dois souligner que toutes les options de plug-in doivent être stockées sous forme de tableau. Bien que nous n’ayons qu’une seule option (authorbox_template), nous l’incluons dans un tableau et le champ correspondant dans la section à des fins de démonstration. La fonction d'enregistrement msp_helloworld_settings_init doit être exécutée sur le hook 'admin_init'. La fonction msp_helloworld_options_validate prend en charge les entrées utilisateur en les nettoyant avec le fichier natif. wp_kses_post filtre qui repose sur la bibliothèque KSES. La fonction msp_helloworld_authorbox_desc crée une description pour la section du formulaire et msp_helloworld_authorbox_field affiche une zone de texte pour gérer le balisage entré. Notez que nous lui attribuons les classes CSS "code-texte large" pour que le style d'administration intégré soit appliqué.

Tout cela produit l'écran suivant dans le panneau d'administration WordPress.

3. Modifiez la fonction qui affiche la boîte de l'auteur (dans core.php)

Nous faisons cela pour obtenir le modèle de la base de données et remplacer les données d’espace réservé ([gauthor_name], [gauthor_url], [gauthor_desc]) par les valeurs correspondantes.

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

Enfin, notre plugin (après l’application de certains styles) produit une jolie boîte d’auteur d’hôte sous le contenu du post.

Conclusion

Stocker et accéder aux données d’option est une tâche très courante que de nombreux plugins doivent effectuer. Grâce au mécanisme d'options, vous pouvez fournir à vos utilisateurs la possibilité d'ajuster le plug-in à leurs besoins (ce qu'ils apprécieront certainement). Même en développant pour vous-même, vous pouvez avoir besoin d'un moyen de stocker les détails d'une installation particulière. S'appuyer sur des API et des fonctions WordPress natives lors de la résolution de telles tâches est un bon moyen de créer un code maintenable, sécurisé et à l'épreuve du temps.

Quelle sorte de plugins souhaiteriez-vous voir disponible pour WordPress? Avez-vous construit votre propre en utilisant cette série? Faites-nous savoir dans les commentaires ci-dessous.

Image utilisée utilise image du module via shutterstock