it-swarm.com.de

Wie lade ich mein Plugin, bevor die Header ausgegeben werden, damit ich WordPress umleiten kann?

Ich habe Code geschrieben, mit dem ich meine Client-Dateien sichern kann, und ihn der WordPress-Funktionsdatei hinzugefügt. Wenn jedoch Aktualisierungen eingehen, wird meine Funktion offensichtlich überschrieben.

Also wollte ich es als Plugin erstellen.

Ich erhalte jedoch immer wieder den folgenden Fehler:

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

Also muss ich meinen Code ausführen, BEVOR WordPress die Header sendet.

Wie mache ich das?

Danke, Richard

Aktualisieren. Okay, hier ist der Code, ich habe zwar die Tags geändert, aber die gleiche Prämisse ...

<?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');
?>

Ich erhalte weiterhin die Fehlermeldung "PHP-Warnung: Header-Informationen können nicht geändert werden - Header bereits gesendet von ...".

Siehst du warum Ich kann es nicht finden. Vielleicht habe ich etwas falsch gemacht, was ich nicht sehen kann.

Richard

4
Richard

Der richtige Hook ist template_redirect, mit dem Sie die erforderlichen Informationen zur Verfügung haben, um Überprüfungen durchzuführen, und gleichzeitig früh genug, um tatsächlich umzuleiten. Wie im Beispiel auf der Codex-Seite:

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' );

Codex-Seite hier - template_redirect

3
Ashraf Slamang

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

oder ein Aktions-Hook, bevor Header gesendet werden: http://codex.wordpress.org/Plugin_API/Action_Reference

2
Rizzo

Wie wäre es mit dieser Aktion? Codex Link - Aktion "send_headers"

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

Dies ist eine Funktion, die ich verwendet habe, um zu überprüfen, ob ein nicht angemeldeter Benutzer versucht, direkt auf eine benutzerdefinierte Seite zuzugreifen (nur für Benutzer). Es wird überprüft, ob jemand eine bestimmte Seite eingegeben hat.

Sogar eine zweite Überprüfung, ob die Haupt-Cookies erstellt wurden (nützlich, um undefinierte Indexfehler zu vermeiden)

    function validate_sesion() {
    if ((is_page('something'))||(is_singular('something'))) {
        if (!is_user_logged_in()) {
            wp_redirect(home_url('log-out'));
            exit();
        } elseif ((empty($_COOKIE["user_id"])) || (empty($_COOKIE["user_role"]))) {
            if (is_user_logged_in()) {
                wp_redirect(home_url('log-out'));
                exit();
            }
        }
    }

Genau wie die anderen Antworten habe ich den Hook 'template_redirect' verwendet

    add_action('template_redirect', 'validate_sesion');

Ich hoffe es kann jemandem helfen

0
Gendrith

Ihre Prüfungen if($_GET['dl']) und else if($_GET['download']) lösen Undefined index:-Fehler aus, und dies scheint ein Header-Problem mit Ihrem My Security Plugin zu verursachen.

Versuchen Sie es zu ändern:

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