web-dev-qa-db-fra.com

'wp_redirect' ne fonctionne pas

Il y a une entrée de formulaire HTML. Voici le code:

<?php if(isset($_POST['login'])) { 
    wp_redirect("/"); 
}

<form accept-charset="UTF-8" method="post" >
    ...
    <center><input name="login" type="submit" value="вход" />
</form>

Mais la redirection ne fonctionne pas. Installer les redirections du plug-in de débogage vers wp, c'est ce qu'il a montré.

http://i.stack.imgur.com/Im4eE.png

PS:

<?php wp_redirect( 'http://www.example.com', 301 ); exit; ?>

Cela ne marche pas non plus.

9
Rincver

Utilisez le code suivant: -

function app_output_buffer() {
    ob_start();
} // soi_output_buffer
add_action('init', 'app_output_buffer');

Ou ajoutez ob_start () comme première ligne de votre propre fonction qui se raccorde à 'init'

N'oubliez pas d'ajouter

exit();

immédiatement après votre appel à

wp_redirect($url);

lien:

https://tommcfarlin.com/wp_redirect-headers-already-sent/

7
Pratyush Deb

Je pense que votre code ne commence pas par cette condition if!

wp_redirect enverra un en-tête, ainsi l’impression/l’écho de ce qui précède aura pour résultat un échec.

Alors vérifiez et voyez si avant cela:

if(isset($_POST['login'])) 
{
    wp_redirect("/");
    exit;
}

il n'y a pas de personnage sorti. Aussi, n'oubliez pas de mettre exit; juste après wp_redirect.

6
revo

Il suffit d'utiliser ceci comme indiqué ci-dessous:

ob_clean();
$url = get_home_url() . '/login';
wp_redirect($url);
exit();

Ou vous pouvez aussi utiliser Javascript pour la redirection.

<script>window.location='http://www.google.com'</script>
1
Bhautik Nada

Assurez-vous de ne pas avoir: get_header(); ou une fonction wordpress susceptible de créer des contenus tels que l'en-tête et le pied de page dans votre modèle. Sinon, la redirection ne fonctionnera pas.

Certains développeurs tentent d'effacer la page en utilisant ob_start();, mais si vous avez du contenu dans votre page, même si vous utilisez ob_start();, la redirection ne fonctionnera pas.

et puis essayez simplement ce code:

wp_redirect(get_permalink($post->ID));
exit;
0
Fury

Essayez ce qui suit, ce qui oblige également à signaler les erreurs:

error_reporting(E_ALL | E_WARNING | E_NOTICE);
ini_set('display_errors', TRUE);


flush();
header("Location: http://www.website.com/");
die('should have redirected by now');

De PHP redirection d'en-tête ne fonctionne pas

Modifier:

Puisque cela vous donne l'avertissement headers already sent, essayez d'ajouter ce qui suit au tout début de votre code:

ob_start();

La réponse à long terme est que toutes les sorties de vos scripts PHP doivent être mises en mémoire tampon dans des variables. Cela inclut les en-têtes et la sortie du corps. Puis, à la fin de vos scripts, effectuez les sorties dont vous avez besoin.

La solution rapide à votre problème sera d’ajouter ob_start (); comme la toute première chose dans votre script si vous n’en avez besoin que dans ce script. Si vous en avez besoin dans tous vos scripts, ajoutez-le comme la première chose dans votre fichier header.php.

Cela active la fonctionnalité de tampon de sortie de PHP. Dans PHP lorsque vous exportez quelque chose (faites un écho ou une impression) si vous devez envoyer les en-têtes HTTP à ce moment-là. Si vous activez la mise en tampon de sortie, vous pouvez générer le script, mais PHP n'a pas à envoyer les en-têtes jusqu'à ce que la mémoire tampon soit vidée. Si vous l'activez et ne le désactivez pas, PHP videra automatiquement tout le contenu du tampon à la fin de l'exécution du script. Il n’ya vraiment aucun inconvénient à l’activer dans presque tous les cas et pourrait vous donner une légère augmentation des performances dans certaines configurations….

De Avertissement: impossible de modifier les informations d'en-tête - en-têtes déjà envoyés ..

0
BrownEyes

J'ai rencontré le même problème et aucune de ces solutions n'a fonctionné pour moi.

La seule chose que j'ai remarquée est différente sur la page, c'est que j'ai utilisé wp_redirect ci-dessous get_header() et que cela fonctionnera correctement si vous l'avez utilisé au-dessus.

0
abdallah Nofal