标头和wp_reDirect不起作用。无法修改标题信息警告

时间:2019-02-11 作者:Emily Childers

是否有人知道无头重定向的其他方法();给我这个错误?wp_redirect 也不适合我。。。

这是我遇到的错误:

警告:无法修改标题信息-标题已由/home/my\\u site/public\\u html/wp content/themes/EHCC/page secure.php:8)在/home/my\\u site/public\\u html/wp content/themes/my\\u theme/template parts/secure表单中发送。php第8行

<?php
ob_start();
if (!empty($_POST[\'password\']))
{
  $redirect = ($_POST[\'password\']);
  $redirect = str_replace(" ","-",$redirect);
  $redirect = strtolower($redirect);
    header("Location: /bids/$redirect");
    die();
}
else
{
  print \'
    <div class=\\\'row secureform__container\\\'>
        <form id=\\\'securedownloads\\\' class=\\\'secureform\\\' method=\\\'post\\\' action=\\\'\\\'>
            <fieldset class=\\\'secureform__inner\\\'>
                <label for=\\\'password\\\' class=\\\'secureform__label\\\'>Password:</label>
                <input id=\\\'password\\\' type=\\\'text\\\' name=\\\'password\\\' maxlength=\\\'40\\\' class=\\\'secureform__input\\\'>
                <input type=\\\'submit\\\' value=\\\'login\\\' class=\\\'secureform__submit\\\'>
                <input type=\\\'hidden\\\' name=\\\'next\\\' value=\\\'\\\'>
            </fieldset>
        </form>
    </div>
    \';
}
?>

2 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

如果您已经将任何内容打印到浏览器,则无法执行重定向。(要进行重定向,必须向浏览器发送正确的标题。并且必须在任何输出之前发送标题。)

所以,若要执行任何重定向,就不能(也不应该)将此类代码直接放入模板中。应将其放置在functions.php 然后在钩子上跑。

而且发送没有操作集的表单不是最好的主意,这是一个安全问题。WP中已经有了一种机制,您应该使用它来处理此类请求。

所以,如果你想正确地做这件事,它可能看起来像这样。。。

在里面functions.php 文件:

function process_my_form() {
    if ( ! empty($_POST[\'password\']) ) {
        $redirect = ($_POST[\'password\']);
        $redirect = str_replace(" ","-",$redirect);
        $redirect = strtolower($redirect);
        wp_redirect( "/bids/$redirect" );
        die;
    }

    wp_redirect( \'<URL OF YOUR FORM>\' );  // redirect back to the form, so replace it with correct URL
    die;
}
add_action( \'admin_post_process_my_form\', \'process_my_form\' );
add_action( \'admin_post_nopriv_process_my_form\', \'process_my_form\' );
在模板文件中:

<div class=\'row secureform__container\'>
    <form id=\'securedownloads\' class=\'secureform\' method=\'post\' action=\'<?php echo esc_attr( admin_url(\'admin-post.php\') ); ?>\'>
        <fieldset class=\'secureform__inner\'>
            <label for=\'password\' class=\'secureform__label\'>Password:</label>
            <input id=\'password\' type=\'text\' name=\'password\' maxlength=\'40\' class=\'secureform__input\'>
            <input type=\'submit\' value=\'login\' class=\'secureform__submit\'>
            <input type=\'hidden\' name=\'next\' value=\'\'>
            <input type=\'hidden\' name=\'action\' value=\'process_my_form\'>
        </fieldset>
    </form>
</div>

SO网友:Arthur Bezner

改为尝试javascript重定向。

echo "<script>location.href = \'$redirect_url\';</script>";

exit;
通过WP螺旋结构,在不太脏的情况下拯救了我的生命。

相关推荐

在“parse_Query”操作中触发“Headers Always Sent”错误

我已将此代码注册到“parse\\u query”操作,该操作尝试根据API资产的可用性触发404。我的实现基于this answer 另一个问题。public function throw404($query) { if ($this->avorgApi->getPresentation($query->get(\"presentation_id\"))) return; $query->set_404(); $t