WP-Mix

A fresh mix of code snippets and tutorials

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.

WP-Mix File-Path Trilogy

Learn more

Digging Into WordPressWordPress Themes In DepthWizard’s SQL Recipes for WordPress