Édité pour réécrire ma question
Je vais essayer d'être le plus clair possible, car je dois résoudre ce problème rapidement.
J'ai désactivé le cron de WordPress et ajouté un vrai travail cron sur mon serveur pour appeler wp-cron.php tous les jours. La fonction que j'appelle ne fonctionne pas, cependant.
L'exécution de code semble s'arrêter à get_posts
, même chose si j'essaie d'utiliser la classe WP_Query
. Aucun message d'erreur, et tout code après ne s'exécute pas.
Quand je n'ajoute pas numberposts
, il me donne cependant 5 posts, qui est la valeur par défaut pour numberposts.
Échantillon :
$posts = get_posts( array(
'post_type' => 'post-type',
'numberposts' => -1,
'tax_query' => array(
array(
'taxonomy' => 'tax',
'field' => 'slug',
'terms' => 'term-slug'
)
)
));
Plus d'infos
init
.wp_ajax_nopriv
et d'appeler admin-ajax.php?action=the-action
à partir de mon serveur cron, mais avec exactement le même résultat.S'il vous plaît répondre avec des questions/demande de code si plus d'informations sont nécessaires.
Éditer - Ma boucle
set_time_limit( 1800 );
$stores = get_option( 'stores' );
foreach( $stores as $store_name => $store )
{
$ctime = 0;
$filename = '';
$xml_path = '';
$dir = dir( $store );
while( false !== ( $entry = $dir->read() ) )
{
$info = pathinfo( $entry );
$ext = strtolower( $info['extension'] );
$filepath = "{$store}/{$entry}";
if( is_file( $filepath ) && $ext == 'xml' && filectime( $filepath ) > $ctime )
{
$ctime = filectime( $filepath );
$filename = $entry;
$xml_path = $filepath;
}
}
if( file_exists( $xml_path ) && is_file( $xml_path ) )
{
//
//Delete products first
//
$posts = get_posts( array(
'post_type' => 'produit-xml',
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => 'succursale',
'field' => 'slug',
'terms' => $store_name
)
)
));
foreach( $posts as $post )
{
$image = get_post_meta( $post->ID, 'nom_photo', true );
if( $image )
{
$fullpath = ABSPATH . get_option( $store_name . '-image-path' );
$fullpath .= '/resized/' . $image;
@unlink( $fullpath );
}
wp_delete_post( $post->ID, true );
}
//
//Insert operations follow....
//
}
}
Chaque fois que vous obtenez get_posts ou WP_Query ou quoi que ce soit du genre, il est important de se rappeler que le code récupère en fait tous les articles en même temps et les charge en mémoire de la base de données. Si vous manquez de mémoire, votre processus mourra simplement avec une erreur. Cela se produira assez souvent si vous tentez d’obtenir un très grand nombre de messages à la fois.
Activer les display_errors de PHP. Vous verrez probablement une erreur de mémoire insuffisante.
Ensuite, augmentez le paramètre PHP memory_limit à 128M ou 256M et vérifiez si vous avez suffisamment de mémoire pour le faire.
Sinon, réécrivez votre get_posts pour utiliser la pagination. Obtenez-les 100 à la fois ou quelque chose du genre. Ensuite, vous n'essayez pas de mémoriser des milliers de publications en une fois.