web-dev-qa-db-fra.com

PHP header () donne les en-têtes déjà envoyés

Je travaille sur un processus de paiement dans Wordpress où, lorsque le client clique sur le bouton de paiement, il est redirigé vers un fournisseur de paiement.

Important à savoir:

  • J'utilise un session dans ce processus.
  • J'utilise la fonction PHP header() pour envoyer le client à cet emplacement.

Mon problème: Désormais, lorsque vous cliquez sur le bouton, il n'y a pas de redirection, mais une erreur.

Avertissement: impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par (sortie démarrée à /var/www/vhosts/website.com/httpdocs/wp-content/themes/template/header.php:24) dans/var/www/vhosts/website.com/httpdocs/wp-content/themes/template/page-checkout.php à la ligne 84

La ligne 84 est:

header( "Location: " . $payment->getPaymentUrl() );

Il semble donc que je devrais faire la redirection plus tôt, mais je ne sais pas comment le faire. Quelqu'un a une idée? Accrocher l'action init ou send_headers?

J'ai une solution à l'heure actuelle qui résout le problème, mais je sais que ce n'est pas la bonne. La solution est de placer ob_start() en haut de mon header.php

1
Robbert

Je devais le faire avec la fonction de redirection incorporée de WordPress; wp_redirect ();

wp_redirect( $payment->getPaymentUrl() );
exit;
0
Robbert