如何在输出标题之前加载插件,以便重定向WordPress?

时间:2015-01-13 作者:Richard

我编写了一些代码,帮助保护客户端文件的安全,并将其添加到WordPress函数文件中。然而,无论何时更新,它都会覆盖我的函数。

所以我想把它创建为一个插件。

但是,我不断遇到以下错误:

PHP Warning:  Cannot modify header information - headers already sent by...
所以我需要在wordpress发送标题之前执行我的代码。

我该怎么做?

谢谢Richard

使现代化好的,这是代码,虽然我更改了标签,但前提相同。。。

<?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警告:无法修改标题信息-标题已由…发送”错误

你知道为什么吗?我找不到它。也许我做错了什么我看不见的事。

理查德

5 个回复
SO网友:Ashraf Slamang

正确使用的挂钩是template_redirect 这样,您就可以获得进行检查所需的信息,同时也可以提前进行实际重定向。根据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\' );
此处为Codex页-template_redirect

SO网友:juz

使用此操作如何?Codex Link - send_headers action

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

SO网友:Rizzo

使用add_action(\'init\', \'your_function\');

或发送标头之前的任何操作挂钩:http://codex.wordpress.org/Plugin_API/Action_Reference

SO网友:darrinb

您的支票,if($_GET[\'dl\'])else if($_GET[\'download\']) 正在投掷Undefined index: 错误,这似乎导致您的“我的安全”插件出现标题问题。

尝试将其更改为:

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

SO网友:Gendrith

这是一个我用来检查未登录用户是否试图直接进入自定义页面(仅针对用户)的函数,它检查是否有人进入了特定页面。

甚至还会再次检查是否创建了主cookie(有助于避免未定义的索引错误)

    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\\u redirect”挂钩

    add_action(\'template_redirect\', \'validate_sesion\');
我希望它能帮助别人

结束

相关推荐

必须使用插件自动加载器:如何正确使用get_plugins()?

我的autoloader类负责加载必须使用的插件,这些插件不位于mu-plugins 文件夹要定位它们,我需要使用get_plugins() 作用According to Codex, 该函数接受一个参数:$plugin\\u folder(string)(可选):单个插件文件夹的相对路径。我的文件层次结构如下所示:|-- /mu-plugins | |-- autoload.php // only includes wpmu/autoload.php&#