How to Add Your Own Settings Page
A common practice for adding your own admin settings page is to use the add_menu() hook to call the add_options_page() function:
add_action('admin_menu', 'myplugin_admin_menu'); function myplugin_admin_menu() { $page_title = 'My Plugin Settings'; $menu_title = 'My Plugin'; $capability = 'manage_options'; $menu_slug = 'myplugin-settings'; $function = 'myplugin_settings'; add_options_page($page_title, $menu_title, $capability, $menu_slug, $function); } function myplugin_settings() { if (!current_user_can('manage_options')) { wp_die('You do not have sufficient permissions to access this page.'); } // Here is where you could start displaying the HTML needed for the settings // page, or you could include a file that handles the HTML output for you. }
How to add your own admin menu
add_action('admin_menu', 'myplugin_menu_pages'); function myplugin_menu_pages() { // Add the top-level admin menu $page_title = 'My Plugin Settings'; $menu_title = 'My Plugin'; $capability = 'manage_options'; $menu_slug = 'myplugin-settings'; $function = 'myplugin_settings'; add_menu_page($page_title, $menu_title, $capability, $menu_slug, $function); // Add submenu page with same slug as parent to ensure no duplicates $sub_menu_title = 'Settings'; add_submenu_page($menu_slug, $page_title, $sub_menu_title, $capability, $menu_slug, $function); // Now add the submenu page for Help $submenu_page_title = 'My Plugin Help'; $submenu_title = 'Help'; $submenu_slug = 'myplugin-help'; $submenu_function = 'myplugin_help'; add_submenu_page($menu_slug, $submenu_page_title, $submenu_title, $capability, $submenu_slug, $submenu_function); } function myplugin_settings() { if (!current_user_can('manage_options')) { wp_die('You do not have sufficient permissions to access this page.'); } // Render the HTML for the Settings page or include a file that does } function myplugin_help() { if (!current_user_can('manage_options')) { wp_die('You do not have sufficient permissions to access this page.'); } // Render the HTML for the Help page or include a file that does }
Provide a Shortcut to Your Settings Page with Plugin Action Links
Plugin action links are a great way to add a quick shortcut to your most commonly used admin menu page.
add_filter('plugin_action_links', 'myplugin_plugin_action_links', 10, 2); function myplugin_plugin_action_links($links, $file) { static $this_plugin; if (!$this_plugin) { $this_plugin = plugin_basename(__FILE__); } if ($file == $this_plugin) { // The "page" query string value must be equal to the slug // of the Settings admin page we defined earlier, which in // this case equals "myplugin-settings". $settings_link = 'Settings'; array_unshift($links, $settings_link); } return $links; }
Learning Resources
- Tutorial: How to write a WordPress Plugin?
- Creating Custom WordPress Administration Pages
- Demystifying Object-Oriented PHP for WordPress Developers
- Create WordPress Plugins with OOP Techniques
- Plugin best practices
- Ten Things Every WordPress Plugin Developer Should Know
- Everything You Need to Know About Translating WordPress Plugins