Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress PHP header()提供已发送的标题_Php_Wordpress_Session_Http Headers - Fatal编程技术网

Wordpress PHP header()提供已发送的标题

Wordpress PHP header()提供已发送的标题,php,wordpress,session,http-headers,Php,Wordpress,Session,Http Headers,我正在Wordpress中进行结账过程,如果客户点击结账按钮,他将被重定向到支付提供商 需要了解的重要信息: 在此过程中,我使用会话 我使用PHPheader()函数将客户发送到此位置 我的问题: 现在,当您单击按钮时,没有重定向,而是一个错误 警告:无法修改标题信息-标题已由第84行/var/www/vhosts/website.com/httpdocs/wp content/themes/template/header.php:24)中的/var/www/vhosts/website.c

我正在Wordpress中进行结账过程,如果客户点击结账按钮,他将被重定向到支付提供商

需要了解的重要信息:

  • 在此过程中,我使用
    会话
  • 我使用PHP
    header()
    函数将客户发送到此位置
我的问题: 现在,当您单击按钮时,没有重定向,而是一个错误

警告:无法修改标题信息-标题已由第84行/var/www/vhosts/website.com/httpdocs/wp content/themes/template/header.php:24)中的/var/www/vhosts/website.com/httpdocs/wp-content/themes/template/page-checkout.php发送

第84行是:

header( "Location: " . $payment->getPaymentUrl() );
看起来我需要早点做重定向,但我不知道怎么做。有人知道吗?钩住
init
send\u标题
操作


目前我有一个解决问题的办法,但我知道这不是正确的办法。解决方案是将
ob_start()
放在我的标题的顶部。php

标题仅在回显任何数据之前发送,因此在任何回显、printf等之前使用它。

因此,出现此错误的原因是,响应标题已经发送,并且您无法在响应之后更新标题。要提前重定向,您有两个选项:

  • 您可以使用该函数并在页面呈现之前在运行时执行重定向
  • 您可以挂接模板重定向操作并在那里执行
    wp\u redirect()

    function my_redirect() {
        exit( wp_redirect( 'url' ) );
    }
    add_action( 'template_redirect', 'my_redirect' );
    
  • 这两种方法都连接到Wordpress自己的重定向架构中。如果您对这些方法有问题,您可能需要考虑重构代码,以便在堆栈中更早设置重定向条件。 为了完全公开,如果您在发送了头之后绝对需要重定向,那么在页面加载之后,您可以始终使用Javascript重定向。您可以简单地将其添加到php文件中(尽管我建议使用重构而不是此方法):


    我能看到您在基于事件的重定向(即单击按钮)上使用PHP的唯一方法是将用户发送到处理程序来解析请求,并将用户发送到适当的URL。否则,您将无法使用上面列出的方法。

    header()
    必须在将任何HTML输出发送到浏览器之前调用函数。在Wordpress开始发送HTML内容之前,您需要放置任何
    header()
    调用。我看不到您的其余代码,因此我只能说,将
    header()
    调用移到任何有输出的代码上方,然后等待您的答案!但我想我们还是不了解对方。我使用这个支付脚本,您可以在第52行看到标题函数。希望你现在能更好地理解我。谢谢
    function append_script() {
        echo '<script type="text/javascript">window.location.replace("url");</script>';
    }
    add_action('wp_head', 'append_script');
    
    <button onclick="window.location.replace('url')">Button Text</button>