plugins_url( string $path = , string $plugin =  ): string

Retrieves a URL within the plugins or mu-plugins directory.


Defaults to the plugins directory URL if no arguments are supplied.


Extra path appended to the end of the URL, including the relative directory if $plugin is supplied.


A full path to a file inside a plugin or mu-plugin.
The URL will be relative to its directory.
Typically this is done by passing __FILE__ as the argument.



string Plugins URL link with optional paths appended.

More Information

This function retrieves the absolute URL to the plugins or mu-plugins directory (without the trailing slash) or, when using the $path argument, to a specific file under that directory. You can either specify the $path argument as a hardcoded path relative to the plugins or mu-plugins directory, or conveniently pass __FILE__ as the second argument to make the $path relative to the parent directory of the current PHP script file.

Uses the WP_PLUGIN_URL or, in the case the $plugin path begins with the WPMU_PLUGIN_DIR path, the WPMU_PLUGIN_URL constant internally, to compose the resultant URL. Note that the direct usage of WordPress internal constants is not recommended.

Uses apply_filters() to apply “plugins_url” filters on the resultant URL, with the following line of code

return apply_filters( 'plugins_url', $url, $path, $plugin );

The plugins_url()  function should not be called in the global context of plugins, but rather in a hook like “init” or “admin_init” to ensure that the “plugins_url” filters are already hooked at the time the function is called. This is vital for many site configurations to work, and if plugins_url()  is called in the global context of a plugin file it cannot be filtered by other plugins (though mu-plugins are able to filter it because they run before any other plugins).


function plugins_url( $path = '', $plugin = '' ) {

	$path          = wp_normalize_path( $path );
	$plugin        = wp_normalize_path( $plugin );
	$mu_plugin_dir = wp_normalize_path( WPMU_PLUGIN_DIR );

	if ( ! empty( $plugin ) && str_starts_with( $plugin, $mu_plugin_dir ) ) {
	} else {
		$url = WP_PLUGIN_URL;

	$url = set_url_scheme( $url );

	if ( ! empty( $plugin ) && is_string( $plugin ) ) {
		$folder = dirname( plugin_basename( $plugin ) );
		if ( '.' !== $folder ) {
			$url .= '/' . ltrim( $folder, '/' );

	if ( $path && is_string( $path ) ) {
		$url .= '/' . ltrim( $path, '/' );

	 * Filters the URL to the plugins directory.
	 * @since 2.8.0
	 * @param string $url    The complete URL to the plugins directory including scheme and path.
	 * @param string $path   Path relative to the URL to the plugins directory. Blank string
	 *                       if no path is specified.
	 * @param string $plugin The plugin file path to be relative to. Blank string if no plugin
	 *                       is specified.
	return apply_filters( 'plugins_url', $url, $path, $plugin );


apply_filters( ‘plugins_url’, string $url, string $path, string $plugin )

Filters the URL to the plugins directory.



User Contributed Notes

  1. Skip to note 3 content

    Common Usage
    The plugins_url() function is commonly used in a plugin file. Passing the __FILE__ PHP magic constant in the place of the $plugin parameter makes the $path relative to the parent directory of that file:

    echo '<img src="' . esc_url( plugins_url( 'images/wordpress.png', __FILE__ ) ) . '" > ';

    The above might output this HTML markup: <img src="">.

    If you are using the plugins_url() function in a file that is nested inside a subdirectory of your plugin directory, you should use PHP’s dirname() function:

    echo '<img src="' . esc_url( plugins_url( 'images/wordpress.png', dirname(__FILE__) ) ) . '" > ';

    The above might output this HTML markup: <img src="">.

You must log in before being able to contribute a note or feedback.