Wordpress - What is the correct way to use WordPress functions outside WordPress files?

There's little difference between the files. When you view a WordPress page, the first file called is index.php. And it is, essentially, your "Method 1:"

define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require ('./wp-blog-header.php');

The blog header file (that queues up the rest of WordPress) loads wp-load.php directly and fires up WordPress itself. Here's most of wp-blog-header.php:

if ( !isset($wp_did_header) ) {

    $wp_did_header = true;

    require_once( dirname(__FILE__) . '/wp-load.php' );

    wp();

    require_once( ABSPATH . WPINC . '/template-loader.php' );

}

So the difference between your two methods is ... what's loaded.

Method 1 is exactly what WordPress does to load itself (with the exception of turning themes off). So if you need all of WordPress and want to fire all of the default hooks/actions, go with that route.

Method 2 is just a further step down the line. It loads all of WordPress, but doesn't call wp() or invoke the template loader (used by themes). Method 2 will be a little lighter-weight, but should give you the same functionality.


Method 2 from your question:

<?php 
define( 'WP_USE_THEMES', false ); // Don't load theme support functionality
require( './wp-load.php' );

wp-load.php is the access to all functions of WordPress, that's all. The first line tells WordPress to load not the Theme files; maybe the files are necessary for your requirements, then remove the line.


wp-blog-header.php will attached a header status, it will return a http status code of 404

wp-load.php will not

Useful to note when using ajax as it checks the http status code