Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

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:

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

share|improve this question
    
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? –  Andrew Bartel Oct 29 '13 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 Oct 29 '13 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. –  Andrew Bartel Oct 29 '13 at 4:12

3 Answers 3

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' ) );
share|improve this answer

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

share|improve this answer
    
Please explain what the above code is doing, and why it is/should be working. –  t f Oct 29 '13 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 :

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.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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