这是我的WordPress项目中ob_start()的正确用法吗?

时间:2019-07-02 作者:NickC

我扩展了WooCommerce以创建自定义端点。此端点指向一个模板,该模板具有一个用于保存用户元数据的表单。提交表单时,我希望它重定向到另一个URL。直到我添加add_action( \'init\', array($this, \'ob_function\')); 这给了我一条“headers ready sent”错误消息。(ob_function 仅包含ob_start).

我的问题是,我应该这样做吗?我已经看了一些例子,已经读过了,等等,但我不确定这是否是一种不好的做法(即使有效),因为我想这是在宣告ob_start 每次init 已加载。我尝试对端点URL使用条件逻辑来限制ob_start 当此目的地是URL时被声明,但一直收到前面提到的“headers ready sent”错误消息。

2 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

我的问题是,我应该这样做吗?

是的,但只有在其他可能/更好的情况下fixes 不要为你工作。

您还可以阅读this article 关于常见WordPress错误的疑难解答,如“headers ready sent”错误。

在开发插件/主题时,我建议您打开WordPressdebugging 因为通常,您可以通过(简单地)检查error_logwp-content/debug.log 与错误相关的条目/行的文件。:)

And here\'s a working example as a reference when adding custom WooCommerce endpoint:

Here\'s the code 其中添加了/company-profile WooCommerce“我的帐户”端点的端点;所以你应该example.com/my-account/company-profile, 它只显示一个表单,其中包含一个字段,用于设置/更新用户的公司ID(注册号..),更新成功后,用户将被发送回“我的帐户”页面。

如果您查看该代码并在默认的WordPress安装中尝试它—由于只有WooCommerce是唯一的活动插件,您应该看到在执行重定向之前没有生成任何输出。

SO网友:NickC

据我所知,在如何处理这一问题上意见分歧(尽管Tom Macfarlin - 一位声誉卓著、备受尊敬的WordPress撰稿人或多或少地建议我做我过去用来解决这个问题的事情。

为了更好的衡量,我补充道ob_flush(); 之后ob_start(); 因为我感觉不到应该启动一个输出缓冲区并使其处于该状态。

我提到的一个问题是add_action( \'init\', array($this, \'ob_function\')); 每次都会打这个电话init 已加载。最后,我将此添加到ob_function() 因此,只有当此端点是URI并且设置了$\\u POST变量时,才会调用它:

public function ob_function(){

    // Start output buffer to solve headers already sent issue for company profile redirect when saved.

    if( \'https://\' . $_SERVER[\'HTTP_HOST\']. $_SERVER[\'REQUEST_URI\']  == trailingslashit(get_site_url()) . \'recruiters/my-account/company-profile/\' ){

        ob_start();

        ob_flush();

    }   

}

相关推荐

Comments.php保留评论日期/时间,但删除日期/时间的#超级链接

我在谷歌上搜索了这个问题,似乎找不到解决方案。。。在评论中,我试图从评论日期/时间中删除超链接,当您将鼠标悬停在评论日期上方时,它会将超链接(示例/#comment-210)链接到以下评论。。。我可以在函数中输入什么。php删除链接,我想保留日期/时间文本。。