Come posso far caricare il mio plugin prima dell'output degli header per reindirizzare in WordPress?
Ho scritto del codice che aiuta a proteggere i file dei miei clienti e l'ho aggiunto al file functions.php di WordPress. Tuttavia, quando arrivano gli aggiornamenti, ovviamente sovrascrivono la mia funzione.
Quindi volevo crearlo come plugin.
Ma continuo a ricevere questo errore:
PHP Warning: Cannot modify header information - headers already sent by...
Quindi ho bisogno di eseguire il mio codice PRIMA che WordPress invii gli header.
Come posso fare?
Grazie, Richard
Aggiornamento. Ecco il codice, ho cambiato i tag ma il concetto è lo stesso...
<?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');
?>
Sto ancora ricevendo l'errore "PHP Warning: Cannot modify header information - headers already sent by...".
Vedi perché? Non riesco a trovarlo. Forse ho fatto qualcosa di sbagliato che non vedo.
Richard

L'hook corretto da utilizzare è template_redirect
che ti permette di avere le informazioni necessarie disponibili per fare i controlli essendo comunque abbastanza precoce da effettuare effettivamente il reindirizzamento. Come nell'esempio presente nella pagina del 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' );
Pagina del Codex qui - template_redirect

Che ne dici di usare questa azione? Link Codex - azione send_headers
add_action( 'send_headers', 'add_redirect_header' );
function add_redirect_header() {
header( 'Location: http://www.google.com' );
}

usa add_action('init', 'tua_funzione');
o qualsiasi hook di azione prima che gli header vengano inviati: http://codex.wordpress.org/Plugin_API/Action_Reference

template_redirect
può essere utilizzato se la funzione che gestisce il reindirizzamento dipende dal fatto che WP sia caricato

@karpstrucking Ho provato così, stesso errore. "PHP Warning: Cannot modify header information - headers already sent by..." i file che dice aver già inviato l'output sono il codice che ho aggiornato nel post originale... ma non ho mai avviato alcun header.

quando appare questo errore, quando provi ad attivare il plugin? puoi postare l'errore completo, comprese le informazioni sul percorso del file

Appare nel log degli errori. Sul sito WordPress, ottengo una pagina bianca. Niente.
Ecco l'intera stringa di errore, ho solo modificato il nome utente nel percorso...
code
"[13-Jan-2015 19:16:35 UTC] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/username/public_html/hvac/wp-content/plugins/My-Security-Plugin/my_security_security.php:1) in /home/username/public_html/hvac/wp-includes/pluggable.php on line 876"code

I tuoi controlli, if($_GET['dl'])
e else if($_GET['download'])
stanno generando errori Undefined index:
, e questo sembra causare un problema con gli header nel tuo My Security Plugin.
Prova a modificarlo in:
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;
}
}
}

Questa è una funzione che ho utilizzato per verificare se un utente non loggato sta cercando di accedere direttamente a una pagina personalizzata (riservata solo agli utenti). Controlla se qualcuno è entrato in una determinata pagina.
Effettua anche un secondo controllo per verificare che i cookie principali siano stati creati (utile per evitare errori di indice non definito)
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();
}
}
}
Proprio come nelle altre risposte, ho utilizzato l'hook 'template_redirect'
add_action('template_redirect', 'validate_sesion');
Spero possa essere utile a qualcuno
