Si j'utilise la fonction suivante dans n'importe quel modèle de thème, cela fonctionne comme prévu. Cependant, lorsque j'essaie de l'utiliser dans une fonction AJAX dans le fichier functions.php, il renvoie vide.
$args = array (
'numberposts' => 10,
'post_type' => array('topic','reply'),
'author' => 454
);
$user_posts = get_posts($args);
Des idées?
Voici la fonction complète:
function he_delete_user(){
$args = array (
'numberposts' => 10,
'post_type' => array('topic','reply'),
'author' => 454
);
$user_posts = get_posts($args);
if (empty($user_posts)){
$response_array['status'] = 'false';
echo json_encode($response_array);
}
else{
// delete all the user posts
foreach ($user_posts as $user_post) {
wp_delete_post($user_post->ID, true);
}
$response_array['status'] = 'success';
echo json_encode($response_array);
}
}
add_action('wp_ajax_he_delete_user','he_delete_user');
Ceci est un pansement, pas une solution. Mais il semble qu'il y ait un bogue dans WP_Query. J'ai donc dû modifier la requête avant son exécution afin que le paramètre post_type ne soit pas ignoré.
1) J'ai changé get_posts () en WP_Query
2) J'ai ajouté ceci à mon fichier functions.php:
function ban_parse_wp_query( $query ) {
$query->set( 'post_type', array('topic','reply') );
return $query;
}
3) Ensuite, j'ai modifié la requête avec cette action juste avant son exécution, puis je l'ai supprimée juste après afin que cela n'affecte pas les autres requêtes:
add_filter( 'pre_get_posts', 'ban_parse_wp_query' );
$user_posts = new WP_Query($args);
remove_filter( 'pre_get_posts', 'ban_parse_wp_query' );