update_option no funciona en una secuencia de comandos PHP independiente

2

Tengo un script PHP independiente en el directorio de mi tema de WordPress que ejecuto una vez cada hora a través de un trabajo cron (o manualmente si es necesario). Todas las demás funciones de WordPress funcionan, excepto la función update_option() .

Una versión simplificada de mi script se ve así:

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

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

y en uno de los archivos de mi tema, estoy ejecutando el siguiente código:

echo get_option('my_option');

No se imprime nada y un var_dump muestra que el valor devuelto es false .

Mi página wp-admin/options.php tampoco muestra my_option .

Estoy perdido, porque debajo de esas líneas, estoy usando las siguientes funciones de WordPress para interactuar con mi base de datos de WordPress con éxito:

  • get_posts
  • delete_post_meta
  • add_post_meta

Al depurar mi script, my_function devuelve una cadena (alrededor de 10 caracteres) y no se arrojan errores con mi configuración de error de PHP en E_ALL .

¿Debo incluir otros archivos principales de WordPress? Pensé que wp-load.php era todo lo que necesitabas.

Versión de WordPress: 3.7

    
pregunta iglvzx 29.10.2013 - 04:57

3 respuestas

2

No estoy seguro de por qué no funciona para usted, pero lo siguiente funciona en el archivo 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' ) );
    
respondido por el brasofilo 29.10.2013 - 08:44
1

Añade estas dos líneas en la parte superior de tu archivo

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

Carga todos los WordPress, pero no llama a wp () ni invoca al cargador de plantillas (usado por temas).

    
respondido por el Bindiya Patoliya 29.10.2013 - 09:27
1

Parece que necesitas un poco de bootstrap para tu código. WordPress ya ha arrancado como index.php o wp-load.php o incluso wp-blog-header.php .

Esto:

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

no se recomienda porque la ruta se puede modificar. Lo que puedes hacer para tener un bootstrap es:

// 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 );

De esta forma podrás cargar WordPress casi en cualquier caso.

    
respondido por el JMau 29.10.2013 - 11:13

Lea otras preguntas en las etiquetas