ouput buffering меня смущает!

Я закодировал плагин, который работает с внешним ReST API. В JSON можно получить набор сообщений для отображения списка сообщений в HTML. Теперь я хочу расширить его, чтобы предоставить ссылки для загрузки связанных документов (в большинстве случаев pdf-файлов). Так много для теории.

Для другой PHP CMS я закодировал прокси-класс. Этот класс запрашивает API и получает двоичный контент документов. Я использую ob_clean() чтобы очистить выходной буфер. Я установил новый заголовок для Content-Disposition: attachment; filename=... Content-Disposition: attachment; filename=... , Content-Type и т. д. Чтобы получить документ, я использую завиток. Он работает нормально. Но не в WordPress:

 Cannot modify header information - headers already sent by (output started at /Users/sebastian/php_workspace/wordpress/wp-includes/admin-bar.php:792) in /Users/sebastian/php_workspace/wordpress/wp-content/plugins/bibsonomy-csl/lib/bibsonomy/CurlHttpRequestProxy.php on line 68 

Я пробовал разные способы удаления выходного буфера без каких-либо успехов. Я пытался:

 while ( ob_get_level() ) { ob_end_clean(); } 

Также я попытался использовать header_remove() PHP. Ничего не работает.

Как удалить буфер вывода в WordPress?

Solutions Collecting From Web of "ouput buffering меня смущает!"

the_content() , выход которого вы фильтруете, является тегом шаблона. Он предназначен для использования как часть HTML-страницы. Одной загрузки страницы не может одновременно быть HTML-страница и загрузка PDF.

Загрузка файла, которую вы генерируете, должна произойти до того, как будет загружен HTML-шаблон, например, на hook_retirect и exit после этого, так что выполнение не будет обрабатывать вывод HTML (или оно будет заполнено внутри вашего файла PDF, что, вероятно, нарушит его).