I have a standalone PHP script in my WordPress theme's directory that I run once every hour through a cron job (or manually if needed). All other WordPress functions are working except the update_option() function.

A simplified version of my script looks like this:


$value = my_function();
update_option('my_option', $value);

and in one of my theme's files, I am running the following code:

echo get_option('my_option');

Nothing is printed, and a var_dump shows that the returned value is false.

My wp-admin/options.php page doesn't list my_option either.

I'm at a loss, because below those lines, I am using the following WordPress functions to interact with my WordPress database successfully:

  • get_posts
  • delete_post_meta
  • add_post_meta

Debugging my script, my_function returns a string (about 10 characters) and no errors are thrown with my PHP error settings at E_ALL.

Do I need to include other WordPress core files? I thought that wp-load.php was all you needed.

WordPress version: 3.7

  • Is the value set in the database? If you modify the update_option() function directly (you can change it back later) and just dump out the $value param, is it being passed correctly? If you do a function_exists on update_option, does it return true? Commented Oct 29, 2013 at 4:04
  • Nothing is being written to the database and my wp-admin/options.php page doesn't show my_option either. function_exists('update_option') returns true.
    – iglvzx
    Commented Oct 29, 2013 at 4:09
  • 1
    Go line by line, verify that $value is correct before update_option() is called. If it is, go line by line in the function itself and see where it's failing. It's "ok" to modify core on a testbed for strictly debugging as long as you never push a modified version to production. Commented Oct 29, 2013 at 4:12

4 Answers 4


I'm not sure why it does't work for you, but the following works in the file wp-content/test.php:

// doesn't make difference to have this or not, for the rest to work
define( 'WP_USE_THEMES', false ); 

require( $_SERVER['DOCUMENT_ROOT'] .'/wp-load.php' );

function my_function()
    return 'hello world';

$value = my_function();
update_option( 'my_option', $value );
var_dump( get_option( 'my_option' ) );

Add this two line in your file top

 $parse_uri = explode( 'wp-content', $_SERVER['SCRIPT_FILENAME'] );
 require_once( $parse_uri[0] . 'wp-load.php' );

It loads all of WordPress, but doesn't call wp() or invoke the template loader (used by themes) .

  • Please explain what the above code is doing, and why it is/should be working.
    – tfrommen
    Commented Oct 29, 2013 at 9:30

It sounds you need some kinda of bootstrap for your code. WordPress has already bootstrap such as index.php or wp-load.php or even wp-blog-header.php.

This :


is not recommanded because path can be modified. What you can do to have some bootstrap is :

// Load WP
$load = 'wp-load.php';
while( !is_file( $load ) ) {
if( is_dir( '..' ) ) 
    chdir( '..' );
    die( 'Could not find WordPress in this place!');
require_once( $load );

In this way you'll be able to load WordPress almost in any case.


This is very old question but I will still comment on it. Now you have multiple options: WP-CLI should work in almost all of the cases. Another option is to create a custom plugin that hooks into 'init' event and it does something.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.