web-dev-qa-db-fra.com

Comment puis-je charger mon plug-in avant que les en-têtes ne soient sortis pour pouvoir rediriger wordpress?

J'ai écrit du code qui sécurise les fichiers de mes clients et l'a ajouté au fichier de fonction wordpresses. Cependant, chaque fois que des mises à jour arrivent, cela écrase évidemment ma fonction.

Je voulais donc le créer comme un plugin.

Cependant, je continue à avoir cette erreur:

PHP Warning:  Cannot modify header information - headers already sent by...

Donc, je dois exécuter mon code, AVANT que wordpress envoie les en-têtes.

Comment je fais ça?

Merci richard

Mettre à jour. Ok, voici le code, j'ai changé les tags cependant, mais même principe ...

<?php 
/*
 * Plugin Name: My WP Plugin
 * Plugin URI: http://www.example.com/plugins
 * Description: My Plugin
 * Version: 1.0
 * Author: My Name
 * Author URI: http://www.example.com/
*/

function somebit_init() {
    $_permaStruc = get_option('permalink_structure');
    if($_permaStruc != "") {
        if($_GET['dl']) {
            header("Location: http://google.com");
            exit;
        } else if($_GET['download']) {
            header("Location: http://google.com");
            exit;
        }
    }
}
add_action('init', 'somebit_init');
?>

J'obtiens toujours l'erreur "Avertissement PHP: Impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par ...".

Tu vois pourquoi? Je ne le trouve pas. peut-être que j'ai fait quelque chose de mal que je ne peux pas voir.

Richard

4
Richard

Le hook approprié à utiliser est template_redirect, ce qui vous permet de disposer des informations nécessaires pour effectuer des vérifications tout en étant suffisamment tôt pour effectuer une redirection. Selon l'exemple de la page du codex:

function my_page_template_redirect()
    {
    if( is_page( 'goodies' ) && ! is_user_logged_in() )
    {
        wp_redirect( home_url( '/signup/' ) );
        exit();
    }
}
add_action( 'template_redirect', 'my_page_template_redirect' );

Page Codex ici - template_redirect

3
Ashraf Slamang

utiliser add_action('init', 'your_function');

ou tout crochet d'action avant que les en-têtes ne soient envoyés: http://codex.wordpress.org/Plugin_API/Action_Reference

2
Rizzo

Que diriez-vous d'utiliser cette action? Codex Link - Action send_headers

add_action( 'send_headers', 'add_redirect_header' );
function add_redirect_header() {
    header( 'Location: http://www.google.com' );
}
1
juz

Vos contrôles, if($_GET['dl']) et else if($_GET['download']) génèrent des erreurs Undefined index:, ce qui semble être à l'origine d'un problème d'en-tête avec votre plug-in My Security Plugin.

Essayez de le changer pour:

function somebit_init() {
    $_permaStruc = get_option('permalink_structure');
    if($_permaStruc != "") {
        if( !empty($_GET['dl'])) {
            header("Location: http://google.com");
            exit;
        } else if( !empty($_GET['download'])) {
            header("Location: http://google.com");
            exit;
        }
    }
}
0
darrinb