J'ai un script autonome PHP dans le répertoire de mon thème WordPress que je lance une fois toutes les heures via un travail cron (ou manuellement si nécessaire). Toutes les autres fonctions WordPress fonctionnent à l'exception de la fonction update_option()
.
Une version simplifiée de mon script ressemble à ceci:
require_once('/path/to/site/wp-load.php');
$value = my_function();
update_option('my_option', $value);
et dans l'un des fichiers de mon thème, j'utilise le code suivant:
echo get_option('my_option');
Rien n'est imprimé et un var_dump
indique que la valeur renvoyée est false
.
Ma page wp-admin/options.php
ne répertorie pas my_option
non plus.
Je suis perdu, car sous ces lignes, j'utilise les fonctions WordPress suivantes pour interagir avec ma base de données WordPress:
Debugging my script, my_function
renvoie une chaîne (environ 10 caractères) et aucune erreur n'est générée avec mes paramètres d'erreur PHP à E_ALL
.
Dois-je inclure d'autres fichiers de base WordPress? Je pensais que wp-load.php
était tout ce dont vous aviez besoin.
Version WordPress: 3.7
Je ne sais pas pourquoi cela ne fonctionne pas pour vous, mais ce qui suit fonctionne dans le fichier 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' ) );
Ajoutez ces deux lignes dans votre fichier en haut
$parse_uri = explode( 'wp-content', $_SERVER['SCRIPT_FILENAME'] );
require_once( $parse_uri[0] . 'wp-load.php' );
Il charge tout WordPress, mais n'appelle pas wp () et n'invoque pas le chargeur de modèles (utilisé par les thèmes).
Il semble que vous ayez besoin d’une sorte de bootstrap pour votre code. WordPress a déjà démarré tel que index.php
ou wp-load.php
ou même wp-blog-header.php
.
Ce :
require_once('/path/to/site/wp-load.php');
n'est pas recommandé car le chemin peut être modifié. Ce que vous pouvez faire pour avoir du bootstrap, c'est:
// 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 cette façon, vous pourrez charger WordPress presque dans tous les cas.