


L'autre jour, je me demandais comment laisser les options du plugin WordPress être contrôlées par un fichier JSON, permettant ainsi d'ajouter plus facilement des paramètres supplémentaires à l'avenir sans avoir à ajuster le code lui-même.
Cet article fournit un exemple de plugin WordPress extrêmement simple avec une seule page de paramètres composée de 2 sections et 3 champs/options.
Le code complet peut être trouvé sur Github.
Mise en place du socle
Le plugin est initialement composé de 3 fichiers.
- aventures.json
- aventures.php
- class.adventures.php
adventures.php avec une inscription de base au plugin :
<?php /* Plugin Name: Adventures Plugin URI: https://mortenhartvig.dk Description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed pharetra nisi eu varius pellentesque. Aenean posuere, velit mollis sodales convallis, ipsum lectus feugiat nunc, ac auctor sapien enim eu metus. Version: 1 Requires at least: 6.1 Requires PHP: 8.3 Author: Morten Hartvig Author URI: https://mortenhartvig.dk License: Do whatever you want */ define('ADV__PLUGIN_DIR', plugin_dir_path(__FILE__)); define('ADV__PLUGIN_VIEW', ADV__PLUGIN_DIR . 'views'); define('ADV__PLUGIN_SLUG', 'adv'); require_once ADV__PLUGIN_DIR . 'class.adventures.php'; (new Adventures());
class.adventures.php avec une classe vide :
<?php class Adventures { public function __construct() { } }
adventures.json contient la structure JSON des paramètres du plugin :
{ "settings": { "pages": [ { "title": "Adventures", "capability": "manage_options", "slug": "adv" } ], "sections": [ { "id": "portal_base", "title": "Base configuration", "description": "Lorem 1, ipsum dolor sit amet consectetur adipisicing elit. Cumque nulla in officiis. Laborum quisquam illo eaque, deserunt facere mollitia sint doloremque maiores, obcaecati reiciendis voluptate itaque iure fugiat quia architecto!", "view": "section" }, { "id": "portal_appearance", "title": "Appearance", "description": "Lorem 2, ipsum dolor sit amet consectetur adipisicing elit. Cumque nulla in officiis. Laborum quisquam illo eaque, deserunt facere mollitia sint doloremque maiores, obcaecati reiciendis voluptate itaque iure fugiat quia architecto!", "view": "section" } ], "fields": [ { "id": "adv_portal_key", "title": "Portal Key", "section": "portal_base", "type": "text", "placeholder": "Enter your portal key", "view": "field.text" }, { "id": "adv_api_host", "title": "Host API", "section": "portal_base", "type": "text", "placeholder": "Enter API host", "default": "https://api.mortenhartvig.dk", "view": "field.text" }, { "id": "adv_portal_theme", "title": "Theme", "section": "portal_appearance", "type": "select", "options": { "rounded.v1": "Round (V1)", "squared.v1": "Square (V1)", "standard": "Standard" }, "default": "standard", "view": "field.select" } ] } }
Lecture des données JSON
Créez une propriété pour vos paramètres et appelez set_settings() :
private $settings; public function __construct() { $this->set_settings(); }
Créez set_settings() et get_json_data() :
private function set_settings() { $data = $this->get_json_data(); $this->settings = $data['settings']; } private function get_json_data() { $file = ADV__PLUGIN_DIR . 'adventures.json'; if (!file_exists($file)) { die('adventures.json not found'); } return json_decode(file_get_contents($file), true); }
Si vous ajoutez un die(print_r($this->settings)) à votre __construct, vous pouvez confirmer que vos paramètres sont effectivement chargés.
Page des paramètres
Appelez init_hooks() depuis le constructeur :
public function __construct() { $this->set_settings(); $this->init_hooks(); }
Créer init_hooks() :
private function init_hooks() { add_action('admin_menu', [$this, 'register_settings_pages']); }
Créez register_settings_pages() et settings_page_callback().
public function register_settings_pages() { foreach ($this->settings['pages'] as $page) { add_options_page($page['title'], $page['title'], $page['capability'], $page['slug'], [$this, 'settings_page_callback']); } } public function settings_page_callback() { $this->render('settings.php'); }
Créer un rendu() :
private function render($filename, $args) { if (is_array($args)) { $value = get_option($args['id']); if (empty($value) && isset($args['default'])) { $value = $args['default']; } $args = array_merge($args, ['value' => $value]); } $file = ADV__PLUGIN_VIEW . $filename; if (!str_ends_with($file,'.php')) { $file .= '.php'; } if(!file_exists($file)) { die('File not found ' . $filename); } require $file; }
Créer des vues/settings.php :
<div> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173390329693560.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="Creating WordPress plugin options based on a JSON structure"></p> <h3> Sections </h3> <p>Add another action in init_hooks:<br> </p> <pre class="brush:php;toolbar:false">private function init_hooks() { add_action('admin_menu', [$this, 'register_settings_pages']); add_action('admin_init', [$this, 'register_settings_sections']); }
Créez register_settings_sections() et settings_section_callback() :
public function register_settings_sections() { foreach ($this->settings['sections'] as $section) { add_settings_section($section['id'], $section['title'], [$this, 'settings_section_callback'], ADV__PLUGIN_SLUG, $section); } } public function settings_section_callback($args) { $this->render($args['view'], $args); }
Créer des vues/section.php :
<p> <?php echo $args['description']; ?> </p>
Champs
Ajouter une troisième action dans init_hooks :
private function init_hooks() { add_action('admin_menu', [$this, 'register_settings_pages']); add_action('admin_init', [$this, 'register_settings_sections']); add_action('admin_init', [$this, 'register_settings_fields']); }
Créez register_settings_fields() et settings_field_callback() :
public function register_settings_fields() { foreach ($this->settings['fields'] as $field) { add_settings_field($field['id'], $field['title'], [$this, 'settings_field_callback'], ADV__PLUGIN_SLUG, $field['section'], $field); register_setting(ADV__PLUGIN_SLUG, $field['id']); } } public function settings_field_callback($args) { $this->render($args['view'], $args); }
Créer des vues/field.select.php :
<?php $html_options = ''; foreach ($args['options'] as $key => $val) { $html_options .= sprintf('<option value="%s">%s</option>', $key, selected($args['value'], $key, false), $val); } printf('<select name="%s"> <p>Create views/field.text.php:<br> </p> <pre class="brush:php;toolbar:false"><?php printf('<input name="%s"> <h3> Saving </h3> <p>To view and save your options add a form to settings.php:<br> </p> <pre class="brush:php;toolbar:false"><div> <p>Change an option and attempt to <em>Save</em>. The save should be successful.</p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173390329893991.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="Creating WordPress plugin options based on a JSON structure"></p> <p>Your settings are now saved and can be accessed throughout the site via:<br> </p> <pre class="brush:php;toolbar:false"><?php echo get_option('adv_portal_theme'); // squared.v1
Ajout de nouveaux champs
Ajoutez le JSON ci-dessous à aventures.json :
{ "id": "adv_api_token", "title": "Host API Token", "section": "portal_base", "type": "text", "placeholder": "Enter API host token", "default": "", "view": "field.text" }
Il sera automatiquement ajouté à vos paramètres :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

L'article traite des objets de données PHP (PDO), une extension pour l'accès à la base de données dans PHP. Il met en évidence le rôle de PDO dans l'amélioration de la sécurité grâce à des instructions préparées et à ses avantages sur MySQLI, y compris l'abstraction de la base de données et une meilleure gestion des erreurs.

MemCache et Memcached sont des systèmes de mise en cache PHP qui accélèrent les applications Web en réduisant la charge de base de données. Une seule instance peut être partagée entre des projets avec une gestion clé.

L'article traite des étapes pour créer et gérer les bases de données MySQL à l'aide de PHP, en se concentrant sur la connexion, la création, les erreurs courantes et les mesures de sécurité.

L'article explique comment JavaScript et PHP interagissent indirectement via les demandes HTTP en raison de leurs différents environnements. Il couvre les méthodes pour l'envoi de données de JavaScript à PHP et met en évidence des considérations de sécurité comme la validation des données et le prot

Pear est un cadre PHP pour les composants réutilisables, l'amélioration du développement avec la gestion des packages, les normes de codage et le soutien communautaire.

PHP est un langage de script polyvalent utilisé principalement pour le développement Web, la création de pages dynamiques, et peut également être utilisé pour les scripts en ligne de commande, les applications de bureau et le développement d'API.

L'article traite de l'évolution de PHP des "outils personnels de la page d'accueil" en 1995 à "PHP: Hypertext Preprocessor" en 1998, reflétant son utilisation élargie au-delà des sites Web personnels.

Des méthodes efficaces pour empêcher les attaques fixes de session incluent: 1. Régénérer l'ID de session après que l'utilisateur se connecte; 2. Utilisez un algorithme de génération d'ID de session sécurisé; 3. Mettre en œuvre le mécanisme de délai d'expiration de la session; 4. Cryptez les données de session à l'aide de HTTPS. Ces mesures peuvent garantir que l'application est indestructible lorsqu'il est confronté à des attaques fixes de session.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Version crackée d'EditPlus en chinois
Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

MinGW - GNU minimaliste pour Windows
Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

mPDF
mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

DVWA
Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel
