// … dans votre fonction ypi_process_unprocessed($manual = true) … // 1) Récupération du batch header ID passé par l’URL $batch_header_id = isset($_GET['show_payout_details']) ? sanitize_text_field($_GET['show_payout_details']) : ''; // 2) Si on est en run manuel, on tente le get_payout() if ($manual && $batch_header_id) { $logs[] = ['', 'debug', "Batch header ID (URL) : {$batch_header_id}"]; if (! method_exists($payout, 'get_payout')) { $logs[] = ['', 'error', 'Méthode get_payout() introuvable']; } else { $details = $payout->get_payout( $batch_header_id ); $logs[] = ['', 'debug', 'Détails récupérés : ' . print_r($details, true)]; // 3) On extrait l’ID interne de la ligne $internal_id = $details->ID ?? null; if (! $internal_id) { $logs[] = ['', 'error', "Impossible de lire details->ID pour header {$batch_header_id}"]; } else { $logs[] = ['', 'debug', "Internal record ID : {$internal_id}"]; // 4) On déclenche enfin le payout $resp = $payout->send_request( $internal_id ); $logs[] = ['', 'debug', 'Réponse send_request : ' . print_r($resp, true)]; if ($resp && ! is_wp_error($resp)) { $logs[] = ['', 'success', "Payout lancé pour record {$internal_id}"]; update_post_meta( $internal_id, '_ywppp_payout_status', 'sent' ); } else { $logs[] = ['', 'error', 'Échec send_request ou WP_Error']; } } } // On sort après le debug, sans faire la boucle normale return $logs; } // … sinon, on continue avec le traitement “standard” pour tous les unprocessed …