web-dev-qa-db-ja.com

WordPressをリダイレクトできるように、ヘッダが出力される前にプラグインをロードする方法を教えてください。

私は自分のクライアントのファイルを保護するのに役立ついくつかのコードを書き、それをワードプレスの関数ファイルに追加しました。しかし、更新が入ってくるたびに、それは明らかに私の機能を上書きします。

だから私はプラグインとしてそれを作成したいと思いました。

しかし、私はこのエラーを受け続けます:

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

だから私は自分のコードを実行する必要がある、wordpressがヘッダを送る前に。

それ、どうやったら出来るの?

ありがとう、リチャード

更新。さて、ここにコードがあります、私はタグを変更しました、しかし同じ前提...

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

「PHPの警告:ヘッダ情報を変更できません - ヘッダはすでに...で送信されています」というエラーが発生します。

その理由はわかりますか?私はそれを見つける事が出来ません。多分私は私が見ることができないことを間違ってやった。

リチャード

4
Richard

使用する正しいフックはtemplate_redirectです。これは、実際にリダイレクトするのに十分早いうちにチェックを行うために必要な情報を利用できるようにします。コーデックスページの例に従って:

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

ここコーデックスページ - template_redirect

3
Ashraf Slamang

add_action('init', 'your_function');を使う

またはヘッダが送信される前のアクションフック: http://codex.wordpress.org/Plugin_API/Action_Reference

2
Rizzo

このアクションを使ってはどうですか? コーデックスリンク - send_headersアクション

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

これは、ログインしていないユーザーがカスタムページに直接入力しようとしているかどうかを確認するために使用していた機能です。

メインクッキーが作成されているかどうかを二度目の確認をします(未定義のインデックスエラーを回避するのに役立ちます)

    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();
            }
        }
    }

他の答えと同じように、私は 'template_redirect'フックを使いました

    add_action('template_redirect', 'validate_sesion');

私はそれが誰かを助けることができると思います

0
Gendrith

あなたのチェックif($_GET['dl'])else if($_GET['download'])Undefined index:エラーを投げています、そしてそれはあなたのMy Security Pluginでヘッダ問題を引き起こしているようです。

それを変更してみてください。

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