update_option not working in stand-alone PHP script

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:

Read More
require_once('/path/to/site/wp-load.php');

$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

Related posts

4 comments

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

    <?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' ) );
    
  2. 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) .

  3. 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 :

    require_once('/path/to/site/wp-load.php');
    

    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( '..' );
    else
        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.

  4. 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.

Comments are closed.