The Ultimate Include/Require Script for WordPress

Justyn Hornor

As a WordPress developer that creates highly customized products for my clients, I found myself running into the same problem over and over again when attempting to create PHP scripts within the WordPress framework. I love using the built-in functionality of WordPress, but I kept running into the same error messages over and over: “call to undefined method…” or “failed to open stream.”

Then you go on a hunt to find the proper files that you need to include, require, include_once, or require_once, depending upon your needs. Once you find the right file, usually some PHP document in the wp-includes folder, for example, you have to include/require it at the beginning of your script — often only to find another “call to undefined method…”

To save time and let you start creating code now, not after hours (or days) of Googling a solution, I created a simple script with which I start all my custom files. It handles all the proper files I need for 99% of my development.

Caveat

I only recommend using this while you are developing your plugin, themes, or scripts and then later, before going to production, finding which files you actually need. I do not recommend you keep this script running all the time as it makes unnecessary calls for files you likely don’t need.

I’ll walk you through this script so that you can see what I’m doing and why. This can also work as a reference tool for you later.

Forget ABSPATH — Make Your Own Path

I like to always have the ABSPATH defined, but it’s hit or miss with some scripts and WordPress installs. I used to use the simple if test to check whether or not the ABSPATH is defined, but that doesn’t always work out either:


/* NOTE: This is what I do NOT do any more */

// Define the ABSPATH

if ( !defined('ABSPATH') ) }

define('ABSPATH', dirname(___FILE___) . '/');

}

Instead, I create my own path to my WordPress install that is far more stable:


$location = $_SERVER['DOCUMENT_ROOT'];

include ($location . '/wp-config.php');
include ($location . '/wp-load.php');
include ($location . '/wp-includes/pluggable.php');

This assumes your WordPress install is in the root of your website i.e. www.yoursite.com

If that’s not the case, simply add the string to your $location variable like this:


$location = $_SERVER['DOCUMENT_ROOT'] . '/your-wp-install';

The Big Three

In my experience, there are three files that cause all my problems when it comes to setting up my scripts. I call these my “Big Three” because once I include or require them, most of my problems go away when it comes to the “call to undefined method” errors. They are:

  1. wp-config.php
  2. pluggable.php
  3. wp-load.php

Once you have these, you’ll find most of your errors go away.


// Get the Big Three

include (ABSPATH . 'wp-config.php');

include (ABSPATH . 'wp-load.php');

include (ABSPATH . 'wp-includes/pluggable.php');

Global $wpdb

Another helpful thing to do is to make sure that your $wpdb is a global variable. This allows any functions you create to have access to the WordPress database query features. This can be a huge time saver.

Because you included the wp-config.php and wp-db.php files, you shouldn’t have any problems getting $wpdb to work properly, but I still like to run an if test to check first:


// Get the Big Four

global $wpdb;

if( !isset($wpdb) )

{

include ($location . '/wp-config.php');

include ($location . 'wp-includes/wp-db.php');

}

Test the Script

If you’re starting with a fresh install of WordPress, you only have one admin user. So, there’s no point in trying to connect to the WordPress database and query users. I built this simple test to see if we are connecting properly. If so, you’ll see your name and email address registered with WordPress in a table:


/*
Test above include statements are working by
listing all the admins and their email
addresses in a table.
*/

// Start Test
$args = array( //set up the query to only get admins
'role' => 'Administrator',
'fields' => 'all_with_meta'
);

$query = get_users( $args ); //use the get_users call

// Set up the table
echo '<table cellpadding="0" cellspacing="0" border="1"><tr><thead><th>Nice Name</th><th>Email</th></thead></tr>';
// For each of the admins, make a table row
foreach ($query as $query) {
echo '<td>' . $query->user_nicename . '</td><td><a href="mailto:' . $query->user_email . '">' . $query->user_email . '</a></td></tr>';

} //End foreach
echo '</table>'; // close the table tag

// End Test - comment out or delete from here to the above "Start Test"

If the test works and you see your name and email address, just delete our comment out the test script and start coding away!

You can drop this PHP file anywhere within the WordPress folders and it will work. So, for initial testing and programming, this script can save you tons of time otherwise spent troubleshooting basic technical problems.

Again, you may want to do some detail work once your functions work properly and only include the absolutely necessary files. If you don’t need to include the wp-config.php file, for example, don’t! Just comment out the code, line by line, and see if it works properly. Keep what you need, lose the rest.

Hopefully this will save you a bunch of time and let you focus on coding, rather than basic mapping of required files for WordPress development.

Here’s the complete script for easy reference. Just copy, save the file wherever needed, and have some fun getting work done:


<?php
/* Justyn's Magic Includer

Assumes you are using the root folder of your server for your
WordPress install. If not, just add the sub-folder where for
WordPress you are using.

For example, add the sub-folder to the $location variable:
$location = $_SERVER['DOCUMENT_ROOT'] . '/your-sub-folder';
*/

$location = $_SERVER['DOCUMENT_ROOT'];

include ($location . '/wp-config.php');
include ($location . '/wp-load.php');
include ($location . '/wp-includes/pluggable.php');

global $wpdb;

if( !isset($wpdb) )
{
include ($location . '/wp-config.php');
include ($location . '/wp-includes/wp-db.php');
}

/*
Test above include statements are working by
listing all the admins and their email
addresses in a table.
*/

// Start Test
$args = array( //set up the query to only get admins
'role' => 'Administrator',
'fields' => 'all_with_meta'
);

$query = get_users( $args ); //use the get_users call

// Set up the table
echo '<table cellpadding="0" cellspacing="0" border="1"><tr><thead><th>Nice Name</th><th>Email</th></thead></tr>';
// For each of the admins, make a table row
foreach ($query as $query) {
echo '<td>' . $query->user_nicename . '</td><td><a href="mailto:' . $query->user_email . '">' . $query->user_email . '</a></td></tr>';

} //End foreach
echo '</table>'; // close the table tag

// End Test - comment out or delete from here to the above "Start Test"

?>

Would you like to delve a little deeper into PHP? Check out our partner site, PHPMaster.com.

Free book: Jump Start HTML5 Basics

Grab a free copy of one our latest ebooks! Packed with hints and tips on HTML5's most powerful new features.

  • http://www.vellorepages.com Paul

    I think this script is absolutely unnecessary. As long as you stick to the general rules for writing a plugin, you never have a problem.
    1. Define your own path for use in your plugin
    2. Never include WP files. Use hooks instead
    3. Whenever you use $wpdb in your functions remember to globalize.
    4. Get a working WordPress install if you don’t have one!
    5. Put the plugin in the appropriate folder /wp-content/plugins/your-plugin. Unless you want to fool with your WP installation and crack it up.

    And no, this script does not give you any advantage whatsoever in creating your plugin. It just makes for more troubleshooting when you remove it.