Skapa inställningssidor för WordPress plugins

Du kan, om du vill, skapa inställningssidor för din plugin med hjälp av register_setting(). Plugininställningar i WordPress är inget mer än options (lagras i wp_options) som grupperas under ett gemensamt namn. Din plugin kan när som helst, med hjälp av get_option(), läsa av dessa inställningar och använda dem i sin kod.

Registrera en plugin ”option page”


class AdminOptions { // all admin options and their values protected $option_group_name = 'my_portfolio'; protected $option_name = 'my_portfolio_options'; protected $admin_page_name = 'my-portfolio-admin'; public function __construct() { if (is_admin()) { // register options page for wp-admin add_action('admin_menu', array($this, 'add_options_page')); add_action('admin_init', array($this, 'page_init')); } } // Add options page public function add_options_page() { // This page will be under "Settings" add_options_page( 'My portfolio settings', // option page title 'Portfolio Settings', // option menu link title 'manage_options', // required capability (permission) of user to see options page $this->admin_page_name, // option page identifier array( $this, 'create_admin_page' ) // admin page render callback ); } // create admin options callback public function create_admin_page() { // let PHP echo out form, simpler syntax ?> <div class="wrap"> <h2>My Portfolio</h2> <form method="post" action="options.php"> <?php // This prints out all hidden setting fields, // as well as all options in the option group settings_fields( $this->option_group_name ); do_settings_sections( $this->admin_page_name ); submit_button(); ?> </form> </div> <?php } }

add_action(‘admin_menu’)

Koden ovan använder add_action(‘admin_menu’), om användaren är en admin, för att säga till WordPress att en ”options page” ska skapas för din plugin. Denna sida ska ha titeln ”My portfolio settings”, och ha en menylänk i WP Admin menyn med titeln ”Portfolio Settings”. En användare måste ha rättigheten (”capability”) ”manage_options” för att länken ska visas för dem i WP Admin menyn. Du ger även WordPress en ”option page identifier”, ett maskinvänligt namn som identifierar just din ”options” sida, samt en callback (create_admin_page) som renderar dens innehåll.

Registrera inställningar (options) för en plugin


// all admin options and their values [ ... ] protected $page_title_key = 'route_page_title'; public function __construct() { if (is_admin()) { // register options page for admins only [ ... ] add_action('admin_init', array($this, 'page_init')); } } [ ... ] // register options and their callbacks public function page_init() { // register a page title option register_setting( $this->option_group_name, // which group the option belongs to $this->option_name // the option to register ); // options form section add_settings_section( 'my_portfolio_options_section', // section ID 'Page attributes', // section title array($this, 'section_info'), // section render callback $this->admin_page_name // menu slug ); // option input field add_settings_field( $this->page_title_key, // field ID 'Page title', // field title array($this, 'page_title_input'), // render callback $this->admin_page_name, // menu slug 'my_portfolio_options_section' // section in which to show ); } // option form section render function public function section_info() { echo('Configure your page attributes'); } // echoes the setting input field. public function page_title_input() { $name = $this->option_name; $key = $this->page_title_key; $adminModel = new AdminModel(); $value = $adminModel->get($key, ''); echo('<input type="text" name="'.$name.'['.$key.']" value="'.$value.'" />'); // '<input type="text" name="custom_option[my_key]" value="current value" />' }

add_action(‘admin_init’)

Koden ovan använder add_action(‘admin_init’) för att registrera samtliga settings och deras inputfält för din plugin. register_setting() berättar för WordPress vad din option heter ($this->option_name) vilket sedan används som nyckel i wp_options tabellen. $this->option_group_name är ett namn som används för att gruppera flera inställningar om du har det (används till exempel i create_admin_page() för att rendera alla fält). Med add_settings_section() och add_settings_field() kan du sedan deklarera vilka fält som ditt formulär ska innehålla. Både sektioner och fält behöver en callback som skriver ut HTML.

Hur sparar WordPress mina inställningar?

Om du tittar i page_title_input() metoden, den som skriver ut page_title_input fältets HTML, ser du att name attributet har array syntax. Om du tittar i create_admin_page ser du att formuläret har action=”options.php”. När en användare sparar formuläret kommer WordPress att skicka alla fälts värden som en array till ”/wp-admin/options.php” som i sin tur letar upp registrerade options (inställningar) och uppdaterar dem med nya värden. Med andra ord behöver du inte ta hand om att spara data, WordPress använder inputs ”name” attribut för att veta vilken option ett värde tillhör.

Läs mer om WordPress plugin options

0 votes

Kommentera