


Pada hari yang lain saya tertanya-tanya bagaimana saya boleh membiarkan pilihan pemalam WordPress dikawal oleh fail JSON, membolehkan seseorang menambah tetapan tambahan dengan lebih mudah pada masa hadapan tanpa perlu melaraskan kod itu sendiri.
Artikel ini memberikan contoh pemalam WordPress yang sangat mudah dengan satu halaman tetapan yang terdiri daripada 2 bahagian dan 3 medan / pilihan.
Kod penuh boleh didapati di Github.
Menyediakan pangkalan
Pemalam pada mulanya terdiri daripada 3 fail.
- adventures.json
- pengembaraan.php
- class.adventures.php
adventures.php dengan pendaftaran pemalam asas:
<?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 dengan kelas kosong:
<?php class Adventures { public function __construct() { } }
adventures.json mengandungi struktur JSON bagi tetapan pemalam:
{ "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" } ] } }
Membaca data JSON
Buat sifat untuk tetapan anda dan panggil set_settings():
private $settings; public function __construct() { $this->set_settings(); }
Buat set_settings() dan 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); }
Jika anda menambah die(print_r($this->settings)) pada __construct anda, anda boleh mengesahkan bahawa anda memang telah memuatkan tetapan anda.
Halaman tetapan
Panggil init_hooks() daripada pembina:
public function __construct() { $this->set_settings(); $this->init_hooks(); }
Buat init_hooks():
private function init_hooks() { add_action('admin_menu', [$this, 'register_settings_pages']); }
Buat register_settings_pages() dan 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'); }
Buat render():
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; }
Buat paparan/tetapan.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']); }
Buat register_settings_sections() dan 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); }
Buat paparan/bahagian.php:
<p> <?php echo $args['description']; ?> </p>
Padang
Tambahkan tindakan ketiga dalam 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']); }
Buat register_settings_fields() dan 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); }
Buat paparan/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
Menambah medan baharu
Tambahkan JSON di bawah pada adventures.json:
{ "id": "adv_api_token", "title": "Host API Token", "section": "portal_base", "type": "text", "placeholder": "Enter API host token", "default": "", "view": "field.text" }
Ia akan ditambahkan secara automatik pada tetapan anda:
Atas ialah kandungan terperinci Mencipta pilihan pemalam WordPress berdasarkan struktur JSON. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel ini membincangkan PHP, memperincikan bentuk penuhnya, kegunaan utama dalam pembangunan web, perbandingan dengan Python dan Java, dan kemudahan pembelajarannya untuk pemula.

PHP mengendalikan data borang menggunakan $ \ _ post dan $ \ _ mendapatkan superglobals, dengan keselamatan memastikan melalui pengesahan, sanitisasi, dan interaksi pangkalan data yang selamat.

Artikel ini membandingkan PHP dan ASP.NET, memberi tumpuan kepada kesesuaian mereka untuk aplikasi web berskala besar, perbezaan prestasi, dan ciri keselamatan. Kedua-duanya berdaya maju untuk projek besar, tetapi PHP adalah sumber terbuka dan bebas platform, sementara ASP.NET,

Kepekaan kes PHP berbeza -beza: Fungsi tidak sensitif, manakala pembolehubah dan kelas sensitif. Amalan terbaik termasuk penamaan yang konsisten dan menggunakan fungsi kes-insensitif untuk perbandingan.

Artikel ini membincangkan pelbagai kaedah untuk pengalihan halaman dalam PHP, yang memberi tumpuan kepada fungsi header () dan menangani isu -isu biasa seperti "tajuk telah menghantar" kesilapan.

Artikel membincangkan jenis yang mengisyaratkan dalam PHP, ciri untuk menentukan jenis data yang dijangkakan dalam fungsi. Isu utama adalah meningkatkan kualiti kod dan kebolehbacaan melalui penguatkuasaan jenis.

Artikel ini membincangkan objek data PHP (PDO), lanjutan untuk akses pangkalan data dalam PHP. Ia menyoroti peranan PDO dalam meningkatkan keselamatan melalui kenyataan yang disediakan dan faedahnya terhadap MySQLI, termasuk abstraksi pangkalan data dan pengendalian ralat yang lebih baik.

Artikel membincangkan mewujudkan dan mengamankan API PHP, memperincikan langkah -langkah dari definisi endpoint ke pengoptimuman prestasi menggunakan rangka kerja seperti Laravel dan amalan keselamatan terbaik.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Dreamweaver CS6
Alat pembangunan web visual

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)
