The add_theme_page() WordPress PHP function is used to add a submenu page to the Appearance main menu in the WordPress dashboard.
Usage
Here’s a basic usage of add_theme_page():
add_theme_page( 'Custom Theme Settings', 'Custom Settings', 'edit_theme_options', 'custom-theme-settings', 'display_custom_settings_page' );
function display_custom_settings_page() {
echo 'Welcome to the custom settings page!';
}
In this example, a new submenu page titled “Custom Settings” will be added to the Appearance menu. The display_custom_settings_page function will output “Welcome to the custom settings page!” when the page is visited.
Parameters
- $page_title (string) – The text to be displayed in the title tags of the page when the menu is selected.
- $menu_title (string) – The text to be used for the menu.
- $capability (string) – The capability required for this menu to be displayed to the user.
- $menu_slug (string) – The slug name to refer to this menu by (should be unique for this menu).
- $callback (callable) – The function to be called to output the content for this page (optional).
- $position (int) – The position in the menu order this item should appear (optional).
More information
See WordPress Developer Resources: add_theme_page()
Please note, add_theme_page() must be called early, so it’s recommended to use it within the admin_menu hook.
Examples
Basic Usage
// Hooking up our function to WordPress admin_menu action hook.
add_action( 'admin_menu', 'add_custom_theme_page' );
function add_custom_theme_page() {
add_theme_page( 'Custom Theme Page', 'Custom Page', 'edit_theme_options', 'custom-theme-page', 'display_custom_theme_page' );
}
function display_custom_theme_page() {
echo 'Welcome to the custom theme page!';
}
In this example, a new submenu page titled “Custom Page” is added to the Appearance menu. The display_custom_theme_page function will output “Welcome to the custom theme page!” when the page is visited.
Display HTML Content
add_action( 'admin_menu', 'add_my_theme_page' );
function add_my_theme_page() {
add_theme_page( 'My Theme Page', 'My Page', 'edit_theme_options', 'my-theme-page', 'display_my_theme_page' );
}
function display_my_theme_page() {
echo '<h1>Welcome to my theme page!</h1>';
echo '<p>This is a paragraph of text.</p>';
}
This example is similar to the first, but the output content includes HTML elements.
Add Theme Page at Specific Position
add_action( 'admin_menu', 'add_theme_page_at_position' );
function add_theme_page_at_position() {
add_theme_page( 'New Theme Page', 'New Page', 'edit_theme_options', 'new-theme-page', 'display_new_theme_page', 61 );
}
function display_new_theme_page() {
echo 'Welcome to the new theme page!';
}
In this example, the new submenu page will appear at position 61 in the menu order.
Check User Capability
add_action( 'admin_menu', 'add_theme_page_with_capability' );
function add_theme_page_with_capability() {
if ( current_user_can( 'edit_posts' ) ) {
add_theme_page( 'Editor Theme Page', 'Editor Page', 'edit_posts', 'editor-theme-page', 'display_editor_theme_page' );
}
}
function display_editor_theme_page() {
echo 'Welcome to the editor theme page!';
}
In this example, the new submenu page will only be added if the current user has the ‘edit_posts’ capability.
Custom Page with Form
add_action( 'admin_menu', 'add_custom_form_theme_page' );
function add_custom_form_theme_page() {
add_theme_page( 'Form Theme Page', 'Form Page', 'edit_theme_options', 'form-theme-page', 'display_form_theme_page' );
}
function display_form_theme_page() {
echo '<h1>Submit Your Details</h1>';
echo '<form method="post">
<label for="name">Name:</label>
<input type="text" id="name" name="name">
<input type="submit" value="Submit">
</form>';
}
This example adds a new submenu page which contains a simple form for submitting details.