admin_url( string $path = '', string $scheme = 'admin' ): string
- Since
- 2.6.0
- Source
wp-includes/link-template.php:3573
Get the URL of the WordPress admin area with admin_url(), optionally appending a path such as 'options-general.php' with the correct scheme. The default 'admin' scheme honors force_ssl_admin() and is_ssl(), so links keep working when the dashboard is forced to https.
Compatibility
- WordPress
- since 2.6.0
- PHP
- 7.4–8.6-dev
- 6.7.7
- 6.8.8
- 6.9.7
- 7.0.4
- 7.1.0
Present in every tracked release (6.7.7 to 7.1.0), and compiles on PHP 7.4 through 8.6-dev.
Parameters
$pathstringoptional- Path relative to the admin URL. Default empty.Default:
'' $schemestringoptional- The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl().
'http' or 'https' can be passed to force those schemes.Default:'admin'
Return value
string- Admin URL link with optional path appended.
Code examples
Every example is editable and runs in a real WordPress booted in your browser by WordPress Playground. Press Run, then edit the code: clicking away re-runs it. Nothing is sent anywhere until you do.
Link to a plugin settings page
Build dashboard links from admin_url() plus add_query_arg() instead of hard-coding /wp-admin/, which breaks on subdirectory installs.
$settings_url = add_query_arg(
array( 'page' => 'myplugin' ),
admin_url( 'options-general.php' )
);
printf(
'<a href="%s">%s</a>',
esc_url( $settings_url ),
esc_html__( 'Plugin settings', 'myplugin' )
);admin_url() always targets the current site. On multisite, use network_admin_url() for network admin pages or get_admin_url( $blog_id ) to link into another site's dashboard.
Performance profile
How much work a call to admin_url() does, and what it touches: the algorithmic scaling, the Zend instruction count per call across PHP versions, the hooks it hands control to, and the core code that calls it. Measured from the compiled opcodes, not a stopwatch, so every number is identical on any machine running the same PHP version, and every function in core is ranked by cost.
- Cost class
- Trivial
- Scaling
- Constant
- Instructions
- 8
- Plugin surface
- None
- Called by
- 50
Touches nothing outside its own arguments.
No loop in the body: the same number of instructions runs whatever you pass in.
Executed per call on PHP 8.5. The body compiles to 8.
Nothing here hands control to plugin code.
50 places in core call this, so the cost is paid more often than your own code shows.
What it touches
- hookthird-party callbacks
apply_filters()one call below admin_url()
Further down the call graph this can also reach option, cache, serialize, query and transient. Those are the worst case, several calls deep and usually down an error path, not what a normal call pays.
What one call costs · 1 distinct outcome
One number would be a lie: the work depends on which branch runs. These are every distinct cost admin_url() can have, taken from its control-flow graph on PHP 8.5.
| When | Instructions | Calls it makes |
|---|---|---|
| always | 8 | get_admin_url() |
Across PHP versions
Compiles the same on PHP 7.4, 8.1, 8.2, 8.3, 8.4, 8.5 and 8.6-dev: 8 instructions, 8 executed per call, 0 branches. The work does not change between versions.
An instruction is not a fixed amount of time, so a matching count is not necessarily the same speed; what it rules out is a difference in the work itself.
Uses · 1
- get_admin_url()Retrieves the URL to the admin area for a given site.
Used by · 50
- Custom_Background::admin_page()Displays the custom background page.
- Custom_Image_Header::help()Adds contextual help.
- Custom_Image_Header::step_1()Displays first step of custom header image page.
- Featured_Content::customize_register()Adds settings to the Customizer.
- Plugin_Installer_Skin::after()Performs an action following a plugin install.
- Theme_Installer_Skin::after()Performs an action following a single theme install.
- Theme_Upgrader_Skin::after()Performs an action following a single theme update.
- WP_Automatic_Updater::send_email()Sends an email upon the completion or failure of a background core update.
- WP_Automatic_Updater::send_plugin_theme_email()Sends an email upon the completion or failure of a plugin or theme background update.
- WP_Comments_List_Table::column_author()Outputs the author column.
- WP_Comments_List_Table::get_views()Returns an array of comment status links.
- WP_Customize_Manager::customize_pane_settings()Prints JavaScript settings for parent window.
Show all 50
- WP_Customize_Manager::get_return_url()Gets URL to link the user to when closing the Customizer.
- WP_Customize_Manager::is_cross_domain()Determines whether the admin and the frontend are on different domains.
- WP_Embed::maybe_run_ajax_cache()If a post/page was saved, then output JavaScript to make an Ajax request that will call WP_Embed::cache_oembed().
- WP_List_Table::comments_bubble()Displays a comment count bubble.
- WP_Nav_Menu_Widget::form()Outputs the settings form for the Navigation Menu widget.
- WP_Plugin_Dependencies::check_plugin_dependencies_during_ajax()Checks plugin dependencies after a plugin is installed via AJAX.
- WP_Plugin_Dependencies::display_admin_notice_for_unmet_dependencies()Displays an admin notice if dependencies are not installed.
- WP_Plugins_List_Table::no_items()Message to be displayed when there are no items.
- WP_Posts_List_Table::handle_row_actions()Generates and displays row action links.
- WP_Privacy_Data_Export_Requests_List_Table::column_email()Actions column.
- WP_Privacy_Data_Export_Requests_List_Table::column_next_steps()Displays the next steps column.
- WP_Privacy_Data_Removal_Requests_List_Table::column_email()Outputs the Actions column.
- WP_Privacy_Data_Removal_Requests_List_Table::column_next_steps()Outputs the Next steps column.
- WP_Privacy_Policy_Content::notice()Adds a notice with a link to the guide when editing the privacy policy page.
- WP_Privacy_Policy_Content::policy_text_changed_notice()Outputs a warning when some privacy info has changed.
- WP_Privacy_Requests_Table::get_admin_url()Normalizes the admin URL to the current page (by request_type).
- WP_Recovery_Mode::handle_exit_recovery_mode()Handles a request to exit Recovery Mode.
- WP_Site_Health::get_test_authorization_header()Tests if the Authorization header has the expected values.
- WP_Site_Health::get_test_https_status()Tests if the site is serving content over HTTPS.
- WP_Site_Health::get_test_insecure_registration()Tests if registration is open to everyone and the default role is privileged.
- WP_Site_Health::get_test_plugin_version()Tests if plugins are outdated, or unnecessary.
- WP_Site_Health::get_test_search_engine_visibility()Tests whether search engine indexing is enabled.
- WP_Site_Health::get_test_theme_version()Tests if themes are outdated, or unnecessary.
- WP_Site_Health::get_test_wordpress_version()Tests for WordPress version and outputs it.
- WP_Site_Health::wp_cron_scheduled_check()Runs the scheduled event to check and update the latest site health status for the website.
- WP_Themes_List_Table::no_items()
- WP_Widget_Media::get_l10n_defaults()Returns the default localized strings used by the widget.
- WP_Widget_Media_Audio::__construct()Constructor.
- WP_Widget_Media_Image::__construct()Constructor.
- WP_Widget_Media_Video::__construct()Constructor.
- Walker_Nav_Menu_Edit::start_el()Start the element output.
- _WP_Editors::editor_js()Print (output) the TinyMCE configuration and initialization scripts.
- _admin_notice_post_locked()Outputs the HTML for the notice to say that someone else is editing or has taken over editing of this post.
- _wp_customize_loader_settings()Adds settings for the customize-loader script.
- _wp_privacy_send_request_confirmation_notification()Notifies the site administrator via email when a request is confirmed.
- check_admin_referer()Ensures intent by verifying that a user was referred from another admin page with the correct security nonce.
- deactivated_plugins_notice()Renders an admin notice when a plugin was deactivated during an update.
- do_robots()Displays the default robots.txt file content.
Source code
function admin_url( $path = '', $scheme = 'admin' ) { return get_admin_url( null, $path, $scheme );}Changelog
Introduced in 2.6.0. Unchanged from 6.7.7 through 7.1.0.
Signature, return type and hooks compared across 5 parsed releases.
About this page
- Parsed data
- Generated from the wordpress-develop 7.1.0 tag, from
src/wp-includes/link-template.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it. - Corrections
- Something wrong on this page? Report it and it gets fixed in the next regeneration.