Getting Path Info with PHP and WordPress
Massive round-up of PHP and WordPress techniques for getting various directory and file path information. This is a mega-reference aimed at PHP/WordPress developers.
Note: these snippets are designed for straight-up copy/pasting into any PHP or plugin script. The results should be well-formatted and easy to read.
PHP: Get file paths
Working with or without WordPress, and assuming we are including the following snippets in a plugin directory named /simple-ajax-chat/
(this is just an example; you can include these snippets in any PHP script located in any directory):
echo 'basename(dirname(__FILE__)) = ' . basename(dirname(__FILE__)) . "\n"; // = simple-ajax-chat
echo '$_SERVER["PHP_SELF"] = ' . $_SERVER["PHP_SELF"] . "\n"; // = /wp-admin/plugins.php
echo '$_SERVER["DOCUMENT_ROOT"] = ' . $_SERVER["DOCUMENT_ROOT"] . "\n"; // = /var/www/path/example.com/httpdocs
echo 'dirname(__FILE__) = ' . dirname(__FILE__) . "\n"; // = /var/www/path/example.com/httpdocs/wp-content/plugins/simple-ajax-chat
echo 'getcwd() = ' . getcwd() . "\n"; // = /var/www/path/example.com/httpdocs/wp-admin
echo '__FILE__ = ' . __FILE__ . "\n"; // = /var/www/path/example.com/httpdocs/wp-content/plugins/simple-ajax-chat/simple-ajax-chat.php
These snippets are entirely PHP, so they work in any directory, with or without WordPress. Note however that basename(dirname(__FILE__))
returns the current directory name, so if your script is in a subdirectory, you can get the parent directory name by adding another dirname()
, like so: basename(dirname(dirname(__FILE__)))
.
WP: Get plugin paths
Working with WordPress, and assuming we are including the following snippets in a plugin directory named /simple-ajax-chat/
(this is just an example, you can include these snippets in any WordPress plugin):
echo 'dirname(plugin_basename(__FILE__)) = ' . dirname(plugin_basename(__FILE__)) . "\n"; // = simple-ajax-chat
echo 'plugin_basename(dirname(__FILE__)) = ' . plugin_basename(dirname(__FILE__)) . "\n"; // = simple-ajax-chat
echo 'plugin_basename(__FILE__) = ' . plugin_basename(__FILE__) . "\n"; // = simple-ajax-chat/simple-ajax-chat.php
echo 'WP_PLUGIN_DIR = ' . WP_PLUGIN_DIR . "\n"; // = /var/www/path/example.com/httpdocs/wp-content/plugins
echo 'plugin_dir_path(__FILE__) = ' . plugin_dir_path(__FILE__) . "\n"; // = /var/www/path/example.com/httpdocs/wp-content/plugins/simple-ajax-chat/
Note: to get the path for the plugin in which the script is included, use plugin_dir_path(). But if you need to get the path of a some other plugin, you can use WP_PLUGIN_DIR
.
WP: Get plugin URLs
Working with WordPress, and assuming we are including the following snippets in a plugin directory named /simple-ajax-chat/
(this is just an example, you can include these snippets in any WordPress plugin):
echo 'plugins_url()' . plugins_url() . "\n"; // = http://example.com/wp-content/plugins
echo 'plugin_dir_url(__FILE__) = ' . plugin_dir_url(__FILE__) . "\n"; // = http://example.com/wp-content/plugins/simple-ajax-chat/
echo 'plugins_url('images/wp.png', __FILE__)' . plugins_url('images/wp.png', __FILE__) . "\n"; // = http://example.com/wp-content/plugins/simple-ajax-chat/images/wp.png
echo 'plugins_url('images/wp.png', dirname(__FILE__))' . plugins_url('images/wp.png', dirname(__FILE__)) . "\n"; // = http://example.com/wp-content/plugins/images/wp.png
Example 1
Combining these different techniques, here is a way to get the current plugin URL from a script that is included in a subdirectory, say, /simple-ajax-chat/inc/myscript.php
echo plugins_url(basename(dirname(dirname(__FILE__)))) .'/css/sac.css';
..which outputs:
http://example.com/wp-content/plugins/simple-ajax-chat/css/sac.css
Example 2
Another example, here showing the difference between using __FILE__
and __DIR__
with plugin_dir_url()
. Let’s say our script runs in a directory located at the following URL:
http://example.com/wp-content/plugins/my-plugin/includes/
Here is the difference between using __FILE__
vs. __DIR__
:
echo plugin_dir_url(__FILE__) .'images/placeholder.png'; // = http://example.com/wp-content/plugins/my-plugin/includes/images/placeholder.png
echo plugin_dir_url(__DIR__) .'images/placeholder.png'; // = http://example.com/wp-content/plugins/my-plugin/images/placeholder.png
Again, the best way to see how these snippets work is to copy/paste them into your WordPress plugin or PHP script (depending on the snippet), and then play around and check the results.
Also check out this useful post at the WP Codex.